, MySQL5.5.5 以后默认innodb,不同存储引擎的表数据存取方式也不同
不同的存储引擎共用一个server层,也就是连接器到执行器的部分
server层
包括连接器,查询缓存,分析器, 优化器...对于确定要使用缓存查询的语句可以用SQL_CACHE显示指定,如下
mysql> select SQL_CACHE * from T where ID=10;
注意: 在mysql8.0 之后, 缓存查询功能不存在了...分析器
如果查询缓存未命中,就开始执行真正的语句了,第一步就是解析sql语句
mysql需要识别出里面的字符串分别是什么, 代表着什么
识别:mysql从你输入的select这个关键字识别出这是个查询语句...优化器
经过分析器后, mysql知道你要做什么, 在开始执行前还要经过优化器的处理
优化器是在表里面有多个索引的时候,决定使用哪个索引, 或者在一个语句有多表关联(join)时, 决定各个表的连接顺序...eg:
mysql> select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;
既可以先从表 t1 里面取出 c=10 的记录的 ID