MySQL性能优化——执行计划分析

发表于:2021-8-31 09:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:数据湖爱好者    来源:华为云社区

  一、执行计划是什么,有什么作用
  SQL语句在数据库中,经过SQL解析器时,解析器会分析SQL语句,并根据索引等信息,制定数据查询的步骤顺序。我们可以通过在SQL语句前添加 EXPLAIN关键字来输出执行计划。
  通过分析执行计划,我们可以了解到:
  · SQL的索引使用情况。
  · 连接查询的执行顺序。
  · 查询扫描的数据函数。
  二、SQL执行顺序分析
  在了解执行计划之前,首先要清楚数据库SQL的执行顺序。
  · SQL书写顺序:SELECT ··· FROM ··· JOIN ··· ON ··· WHERE ··· GROUP BY ··· HAVING ··· ORDER BY ··· LIMIT [OFFSET]
  · SQL执行顺序:FROM ··· JOIN ··· ON ···WHERE ··· GROUP BY ··· HAVING ··· SELECT ··· ORDER BY ··· LIMIT
  三、SQL执行计划详细分析
  执行计划可能存在多行,每一行代表对一个数据库对象的操作,下面对每个参数进行解析。
  1、ID
  ID列中如果为一组数字,表示执行SELECT语句的顺序;如果为NULL,则说明这一行数据是由另外两个SQL语句进行 UNION操作后产生的结果集。
  ID值相同时,说明SQL执行顺序是按照显示的从上至下执行的。
  ID值不同时,ID值越大代表优先级越高,则越先被执行。
  按照上述规则分析上图,我们可以看出,因为只有一个SELECT,索引两条数据ID相同,执行顺序就是先上面的表a,再执行下面的表b。MySQL优化器会根据表中的索引的统计信息来调整表关联的实际顺序。
  2. SELECT_TYPE 查询类型
  3. TABLE 表
  包含以下几种结果:
  · 输出的数据行所在表的名称,如果表取了别名,则显示的是别名。
  · <union M,N>: 由ID为M,N查询union产生的结果集。
  · <derived N> or <subquery N> :由ID为N的查询产生的结果。
  4. PARTITIONS 分区
  · 查询匹配的记录来自哪一个分区。
  · 对于分区表,显示查询的分区ID。
  · 对于非分区表,显示为NULL。
  5. TYPE 执行类型
  按性能从高至低排列如下:
  6. POSSIBLE_KEYS 可用索引
  · 指出MySQL能使用哪些索引来优化查询。
  · 查询列所涉及到的列上的索引都会被列出,但不一定会被使用。
  7. KEY 使用索引
  · 查询优化器优化查询实际所使用的索引。
  · 如果表中没有可用的索引,则显示为NULL。
  · 如果查询使用了覆盖索引,则该索引仅出现在Key列中。
  8. KEY_LEN 索引长度
  显示MySQL索引所使用的字节数,在联合索引中如果有3列,假如3列字段总长度为100个字节,Key_len显示的可能会小于100字节,比如30字节,这就说明在查询过程中没有使用到联合索引的所有列,只是利用到了前面的一列或2列
  · 表示索引字段的最大可能长度
  · Key_len的长度由字段定义计算而来,并非数据的实际长度
  9. REF
  表示当前表在利用Key列记录中的索引进行查询时所用到的列或常量。
  10. ROWS
  · 表示MySQL通过索引的统计信息,估算出来的所需读取的行数(关联查询时,显示的是每次嵌套查询时所需要的行数)。
  · ROWS值的大小是个统计抽样结果,并不十分准确。
  11. FILTERED
  · 表示返回结果的行数占需读取行数的百分比。
  · Filtered列的值越大越好(值越大,表明实际读取的行数与所需要返回的行数越接近)。
  · iltered列的值依赖统计信息,所以同样也不是十分准确,只是一个参考值。
  12. EXTRA 附加信息
  包含MySQL如何执行查询的附加信息:

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号