一 查看SQL执行频率
二 SQL慢查询日志
三 Show profile 指令
四 explain指令
可以获取使用了哪个索引,使用的索引的长度
以下是 EXPLAIN
输出中各列的含义及常见值的解释:
1. id
含义:查询的标识符,表示查询中 SELECT 的执行顺序。
常见值:
相同
id
:表示多个表在同一查询中(如联表查询)。不同
id
:数字越大越先执行(如子查询)。NULL
:表示 UNION 结果的合并。
2. select_type
含义:查询的类型。
常见值:
SIMPLE
:简单 SELECT(不含子查询或 UNION)。PRIMARY
:最外层的 SELECT。SUBQUERY
:子查询中的第一个 SELECT。DERIVED
:派生表(FROM 子句中的子查询)。UNION
:UNION 中的第二个或后续查询。UNION RESULT
:UNION 的结果。
3. table
含义:当前行访问的表名(或别名、派生表名如
<derivedN>
)。
4. partitions
含义:查询匹配的分区(未分区表为
NULL
)。
5. type
(关键列)
含义:表的访问方式(性能从优到劣排序):
system
:表只有一行(如系统表)。const
:通过主键或唯一索引的等值查询(如WHERE id = 1
)。eq_ref
:联表时使用主键或唯一索引的等值匹配(如A JOIN B ON A.id = B.id
)。ref
:非唯一索引的等值查询(可能返回多行)。range
:索引范围扫描(如BETWEEN
、IN
、>
)。index
:全索引扫描(按索引顺序读取全部索引节点)。ALL
:全表扫描(性能最差,需优化)。
6. possible_keys
含义:可能用到的索引(实际可能未被使用)。
7. key
含义:实际使用的索引(
NULL
表示未用索引)。
8. key_len
含义:使用的索引长度(字节数),可判断是否使用了索引的全部部分。
例如:
INT
为 4 字节,VARCHAR(255)
UTF-8 可能为 765 字节(3×255)。
9. ref
含义:与索引比较的列或常量。
例如:
const
(常量)、func
(函数)、db.table.column
(其他表的列)。
10. rows
(关键列)
含义:MySQL 预估需要扫描的行数(越小越好)。
11. filtered
含义:查询条件过滤后剩余行的百分比(0~100)。
例如:
rows=1000
且filtered=10%
,则最终扫描约 100 行。
12. Extra
(关键列)
含义:额外信息(常见值):
Using index
:覆盖索引(无需回表)。Using where
:需回表查询数据后过滤。Using temporary
:使用了临时表(常见于 GROUP BY、ORDER BY)。Using filesort
:外部排序(需优化索引或查询)。Using join buffer
:联表时使用了连接缓冲。