mysql优化-排查sql问题方法
2020-03-18 16:41:15 来源:admin 点击:879
explain
排查慢的问题,就是全表扫描,没有索引,所以加索引
explain详解
Select_type 查询类型
Simple 简单查询,不包含union及子查询
Primary 最外层的select查询
Union union中第二个或随后的select查询,不依赖于外部查询的结果集
Dependent union 依赖于外部查询的结果集
Subquery 子查询第一个select子句,不依赖于外部查询的结果集
Dependent Subquery 依赖于外部查询的结果集
Drived from子句中有子查询,mysql会递归这些子查询,放入临时表
Uncacheable union union中的第二或随后的select子句,不可缓存的子查询
Uncacheable subquery 结果集中不能被缓存的子查询,必须重新为外层查询的每一行进行评估
Type 连接使用的类型
System 表只有一行
Const 表中只有一条
Eq_ref 表中只有一条
Ref 不能基于关键字选择单个行,可能查找到多个符合条件的行,ref会使用索引和某个常量或者多表查询的结果值进行比较
Ref_or_null 在ref的初次查找的基础上,对null的结果集进行二次查找
Index_merge 索引合并优化被使用了
Unique_subquery 在in查询中 使用唯一索引 in ( select pid from tablea )
Index_subquery 在in查询中 使用非唯一索引
Range 只检索给定范围的行,使用一个索引来选择行 ( = > < is null between in )用常量比较关键字列
Index 全表扫描,避免了排序,按照索引次序来扫描
All 从头到尾全表扫描
Possible_keys 该表中有哪些索引有助于查询
Key 实际选择使用的索引,如果为null,没有使用索引
Key_len 使用的索引的长度,越短越好
Ref 索引的哪一列被使用了
Rows 返回请求数据的行数
Extra 不能使用索引,需要先对此项进行优化
Using temporary 使用临时表 (group by order by )
Using filesort 会对结果集使用外部索引排序,可能是在内存中或者磁盘上进行排序(文件排序)
2.慢查询
慢查询优化思路:建立联合索引,根据索引最左原则,对结果集进行优化(不建议用using index做强制索引)
在mysql配置文件中
3.慢查询分析工具一
4.慢查询分析工具二