知识点
1 不要陷入细节 先鸟瞰全貌
2 server层有 连接器,分析器,优化器,执行器
3 存储引擎层有存储过程,触发器,视图 ,负责数据的存储和提取
4 从mysql5.5.5开始innodb为默认存储引擎
5 连接器负责建立连接, 管理权限 , 管理连接
6 不要在生产环境用mysql -hport -up , 用-p然后再输入密码
7 修改权限后要重新建立连接才有效
8 show processlist可以看到所有连接情况 sleep表示空闲
9 wait_timeout参数控制空闲多久断开
10 定期断开长连接,防止某些连接内存积累过多
11 5.7可以执行mysql_reset_connection来重新初始化连接资源,不需要像上面那样断开
12 如果语句之前执行过, 可以直接到查询缓存
13 不建议开查询缓存 , 因为失效频繁, 一个更新就会把整张表的查询缓存清空 , 8.0已经删掉这功能了 query_cache_type=DEMAND
14 分析器负责检查语法错误
15 优化器可以优化join顺序 , 决定索引的使用
16 执行器调用存储引擎执行语句获取结果集 返回给客户端
17 引擎的扫描航和rows_examined并不完全相同
18 问题 select * from T where k=1 , 表里没有k字段 , 会报错 , 是哪一阶段报的 ?
我的答案: 执行器 , 错了 , 正确是分析器 , 分析器不仅检查语法错误 , 还检查表和列是否存在
《高性能mysql》里提到解析器和预处理器。
解析器处理语法和解析查询, 生成一课对应的解析树。
预处理器进一步检查解析树的合法。比如: 数据表和数据列是否存在, 别名是否有歧义等。如果通过则生成新的解析树,再提交给优化器。
所以我觉得课后习题的错误应该发生在在分析器处理阶段>_<
评论 留言可以当做测试用例 看提问自己能不能解答