MST

星途 面试题库

面试题:MySQL应用程序性能剖析之中等难度题

在MySQL应用程序性能剖析时,简述如何利用EXPLAIN关键字分析查询语句的执行计划,以及从执行计划中重点关注哪些关键信息来优化性能?
43.6万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
  1. 利用EXPLAIN关键字分析查询语句执行计划: 在MySQL中,只需在查询语句前加上EXPLAIN关键字,如EXPLAIN SELECT column1, column2 FROM table_name;。执行该语句后,MySQL会返回查询执行计划的详细信息。
  2. 从执行计划中重点关注的关键信息
    • id:表示查询中每个SELECT子句的标识符。id相同,执行顺序由上至下;id不同,值越大越先执行。
    • select_type:常见类型有SIMPLE(简单查询,无子查询或union)、PRIMARY(最外层查询)、SUBQUERY(子查询)、DERIVED(派生表,在from子句中的子查询)等。不同类型影响查询的复杂程度和执行方式。
    • table:显示这一步操作所涉及的表。
    • partitions:若表进行了分区,这里显示查询将访问的分区。
    • type:表示表的连接类型,常见类型从优到差依次为system(表仅有一行记录,基本不会出现)、const(通过索引一次就找到记录,常用于主键或唯一索引查询)、eq_ref(多表连接时,对前一个表的每行记录,在后一个表中通过索引找到匹配的唯一记录,常用于主键或唯一索引连接)、ref(通过非唯一索引匹配多个记录)、range(只检索给定范围的行,使用一个索引来选择行,如where条件有between>、<等)、index(全索引扫描,遍历整个索引树)、ALL(全表扫描)。一般应尽量避免ALL类型。
    • possible_keys:显示可能用于查询的索引。若为空,可能需要添加合适索引。
    • key:实际使用的索引。若与possible_keys不一致,可能需调整查询或索引。
    • key_len:表示使用索引的长度,可判断索引使用是否高效。值越短越好。
    • ref:显示哪些列或常量被用于查找索引列上的值。
    • rows:估计为找到所需行需读取的行数,值越小性能越好。
    • filtered:表示存储引擎返回的数据在server层过滤后,剩下满足查询条件的记录数量的比例,值越高越好。