一 查看SQL执行频率

image-lxh8.png

image-v8q5.png

二 SQL慢查询日志

image-owod.png

三 Show profile 指令

image-7bqa.png

image-pdu7.png

四 explain指令

可以获取使用了哪个索引,使用的索引的长度

image-mgcu.png

image-6ch0.png

以下是 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(关键列)

image-obyj.png

  • 含义:表的访问方式(性能从优到劣排序):

    • system:表只有一行(如系统表)。

    • const:通过主键或唯一索引的等值查询(如 WHERE id = 1)。

    • eq_ref:联表时使用主键或唯一索引的等值匹配(如 A JOIN B ON A.id = B.id)。

    • ref:非唯一索引的等值查询(可能返回多行)。

    • range:索引范围扫描(如 BETWEENIN>)。

    • 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=1000filtered=10%,则最终扫描约 100 行。


12. Extra(关键列)

  • 含义:额外信息(常见值):

    • Using index:覆盖索引(无需回表)。

    • Using where:需回表查询数据后过滤。

    • Using temporary:使用了临时表(常见于 GROUP BY、ORDER BY)。

    • Using filesort:外部排序(需优化索引或查询)。

    • Using join buffer:联表时使用了连接缓冲。