定位SQL查询缓慢问题
在查询前加上 EXPLAIN
即可分析造成缓慢的地方。
其中有十个字段,分别如下:
- id:
- 查询中SELECT语句的序列号。如果该查询是子查询,则id的值可能会递增。
- select_type:
- SELECT的类型,可以是SIMPLE(简单SELECT,没有子查询或UNION)、PRIMARY(最外层的SELECT)、UNION(UNION中的第二个或之后的SELECT语句)、DEPENDENT UNION(UNION中的第二个或之后的SELECT语句,依赖于外部查询)、UNION RESULT(UNION的结果)、SUBQUERY(子查询中的第一个SELECT)、DEPENDENT SUBQUERY(子查询中的第一个SELECT,依赖于外部查询)等。
- table:
- 查询涉及的表名。
- type:
- 访问类型,即MySQL决定如何查找表中的行。常见的类型有:ALL(全表扫描)、index(索引全扫描)、range(索引范围扫描)、ref(使用非唯一索引或唯一索引的前缀进行的查找)、eq_ref(使用唯一索引的等值查找)、const/system(查询优化器能将查询转换为一个常量时)、NULL(优化器在执行时从索引中检索不到任何行)。
- possible_keys:
- MySQL可以使用哪些索引来优化查询。
- key:
- 实际上决定使用的索引。
- key_len:
- 使用的索引的长度。长度越短越好。
- ref:
- 显示哪些列或常量被用于索引查找。
- rows:
- MySQL估计为了找到所需的行而要检查的行数。
- Extra:
- 额外的信息,如Using index(使用了覆盖索引)、Using temporary(使用了临时表)、Using filesort(使用了外部索引排序)等,这些信息可以帮助理解查询的额外性能开销。
了解这些字段可以帮助分析和优化查询性能,特别是在处理大量数据和高并发场景时。
看看其他吧