今天写了个慢到哭的查询,想用explain分析下执行计划,后来发现explain也是有局限性的:
EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况 •EXPLAIN不考虑各种Cache •EXPLAIN不能显示MySQL在执行查询时所作的优化工作 •部分统计信息是估算的,并非精确值 •EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划
好吧,那我就把存储过程,转换为普通sql进行分析。
id:标识符,select查询的序列号;
select_type:标识select语句的类型,primary表示主查询或最外层的查询语句;DEPENDENT SUBQUERY子查询中的第一个select,取决于外面的查询;
table:查询的表;
type:标识表的连接类型;index标识扫描到了索引树;all表示整表扫描;
possible_key:mysql能使用哪个索引在该表中找到行;
key:查询中实际使用的索引;
key_len:mysql选择的索引字段按字节计算的长度。
rows:显示mysql在表中进行查询时必须检查的行数;
extra:该列mysql在处理查询时候的详细信息;
与explain类似的关键字 :DESCRIBE 简写:DESC;
分析我的存储过程结论:我建的索引基本没用上,还是整表的扫描;准备将聚集索引分开;优化下嵌套查询;
结尾彩蛋: