select update
链接查询的执行顺序
查询扫描的数据行数
ID 列
ID列中的数据为一组数字,表示执行select语句的顺序
ID值相同是,执行顺序由上及下
explain
查询计划,
SELECT_TYPE列
simple 简单查询
union union 操作的第二个或是以后的查询的值为union
dependent union 当union作为子查询时,第二或是第二个后的查询的select_type值
union result union 产生的结果集
derived 出现在from子句中的子查询
输出数据行所在的表的名称
union M.N
分区表partitions 列
TYPE 列
system 这是const链接类型的一个特例,当查询的表只有一行时使用
const 表中有且只有一个匹配的行时使用,如对主键或是唯一索引的查询 这是效率最高的链接方式
eq_ref 唯一索或主键引查找,对于每个索引键,表中只有一条记录与之匹配
ref 非唯一索引查找,返回匹配某个单独值的所有行
ref_or_null 类似于ref类型的查询,但是附加了对null值列的查询
index_mer 该链接类型表示使用了索引和并优化方法。
ge
range 索引范围扫描,常见于between > < 这样的查询条件
index FULL indexScan全索引扫描,同ALL的区别是,遍历的索引树
ALL FULL TABLE Scan 全表扫描,这是效率最差的链接方式
Extra 列
distinct 优化distinct 操作,再找到第一匹配的元组后即停止找同样值的动作
Not exists 使用 not exists 来优化查询
Using filesort 使用额外操作进行排序,通常会出现在order by 或group by 查询中
Using index 使用了覆盖索引进行查询
Using temporary MySQL 需要使用临时表来处理查询,常见于排序,子查询,和分组查询
Using where 需要在mysql服务器层使用where条件来过滤数据
select tables optimized away 直接通过索引来获取生育局,不用访问表
possible_keys列
肯能会使用的索引
ken_len 列
表示索引字段的最大可能长度
ref 列
rows列
表示mysql通过索引统计信息,估算的所需读取的行数
rows 值的大小是个统计抽样结果,并不十分准确
Filtered列
表示返回结果的行数占需读取行数的百分比
执行计划的限制
常见的优化例子
慢查询日历
启用mysql慢查日志
set global slow_query_log_file = /sql_log/slow_log.log;
set global log_queries_not_using_indexes = on;
set global long_query_time = 0.001;
set global low_query_log = on;