explain 关键字可以模拟优化器执行SQL语句,分析查询语句、结构的性能瓶颈,在 select 语句之前增加 explain 关键字,会获得执行计划的信息。
select 的序列号,id 值越大优先级越高,id 值相同从上往下执行,id为NULL最后执行
(1)simple:简单查询,不包含子查询和 union;
(2)primary:复杂查询中最外层的 select;
(3)subquery:包含在 select 中的子查询,不在 from 子句中;
(4)derived:在 from 子句中的子查询,结果存放在一个派生临时表;
(5)union:在 union 中的第二个查询后的 select;
(1)from 子句中有子查询时,table列是derivenN,其中N标识查询依赖 id=N 的查询;
(2)union 时,union result 的 table 列的值为union1,2,1和2表示参与 union 的 select 的 id 列;
partitions 字段显示查询访问的分区
(1)性能从高到低为:system > const > eq_ref > ref > range > index > ALL ;
(2)查询一般达到 range 级别较好,最好能达到 ref;
(1)explain 时可能出现 possible_keys 有列,而 key 显示 NULL 的情况,因为表中数据不多,mysql认为索引对查询帮助不大,选择了全表查询;
(2) 如果该列是NULL,则没有相关的索引,可以通过检查 where 创建一个适当的索引来提高查询性能;
(1)没有使用索引,则该列是 NULL;
(2)强制mysql使用或忽视possible_keys列中的索引,在查询中使用 force index、ignore index;
这一列显示了mysql在索引里使用的字节数;
显示在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名(例:test.id);
mysql估计要读取并检测的行数,不是结果集里的行数
百分比值,rows * filtered/100 可以估算出将要和 explain 中前一个表进行连接的行数(前一个表指 explain 中的id值比当前表id值小的表);
(1)Using index:使用覆盖索引;
(2)Using where:使用 where 语句来处理结果,并且查询的列未被索引覆盖 ;
(3)Using index condition:查询的列不完全被索引覆盖,where 条件中是一个前导列的范围;
(4)Using temporary:mysql 需要创建一张临时表来处理查询,一般要进行索引优化;
(5)Using filesort:将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序,考虑使用索引来优化;
(6)Select tables optimized away:使用某些聚合函数(比如 max、min)来访问存在索引的某个字段;
1、感谢老板,给我补充了维生素RMB。
2、保护费收到了,有事给姐打电话!
... ...
1、我怀疑你是我的客户,但是你不来,我没有证据。
2、有单请麻烦我,不要麻烦我的同行们,我农村来的,不怕累!
... ...
1、去拥抱陌生,去期待惊喜。
2、以如常为喜,以如愿为安。
... ...
1、好坏全靠运气,咸淡全靠手气。
2、三餐四季不必太匆忙,有一种幸福叫下厨房。
... ...
1、得之坦然,失之淡然。
2、人间风月,浅尝即可。
... ...
1、感谢老板,给我补充了维生素RMB。
2、保护费收到了,有事给姐打电话!
... ...
1、我怀疑你是我的客户,但是你不来,我没有证据。
2、有单请麻烦我,不要麻烦我的同行们,我农村来的,不怕累!
... ...
1、去拥抱陌生,去期待惊喜。
2、以如常为喜,以如愿为安。
... ...
1、好坏全靠运气,咸淡全靠手气。
2、三餐四季不必太匆忙,有一种幸福叫下厨房。
... ...
1、得之坦然,失之淡然。
2、人间风月,浅尝即可。
... ...