Code前端首页关于Code前端联系我们

如何发现并改善mySQL语句性能问题?

terry 2年前 (2023-09-26) 阅读数 45 #数据库

查找性能不佳的 SQL 语句最重要、最有效的方法是使用执行计划。我们知道,无论什么类型的数据库或数据库引擎,在SQL语句的执行过程中都会进行很多相关的优化。对于查询语句来说,最重要的优化方法就是使用索引。执行计划显示了数据库引擎输出SQL语句的详细信息,包括使用的索引、要使用的索引以及与使用的索引相关的信息。 mySQL语句的性能问题 如何定位及优化?

执行计划id中包含的信息包含多个数字。指定查询中每个子查询的执行顺序;

  • id 从上到下执行顺序相同。
  • ID 不同。 ID值越大,优先级越高,首先执行。
  • 当id为空时,代表一组结果。没有必要将其用于提问。常出现在疑问句等中。

select_type 每个子查询的查询类型,默认查询类型。

idselect_typedescription
1SIMPLE 不包含子查询或联合查询
2PRIMARYPRIMARY AND
3SUBQUERY 选择中包含的问题或在哪里子句
4DARIVA子句
5UNION中包含的查询出现在联合
6UNION RESULTb to FROM b table请求之后的查询语句中上面第三个例子中的数据库表。从派生表查询数据时,会显示一个x,表示对应的执行计划id partition 表 创建分区和表时,可以指定用哪些列来分隔表。示例:
create table tmp (
    id int unsigned not null AUTO_INCREMENT,
    name varchar(255),
    PRIMARY KEY (id)
) engine = innodb
partition by key (id) partitions 5;
复制代码
mySQL语句的性能问题 如何定位及优化?

类型(非常重要,可以检查是否有索引) 访问类型

  • ALL 尝试整个数据表
  • 印度索引
  • 区域 搜索索引 index_subquery 使用 ref子查询中的unique_subquery 在子查询中使用eq_ref
  • ref_or_null Ref 针对空索引进行优化 PRIMARY KEYORUNIQUE NOT NULL 索引关联中的eq_ref 用于访问查询。

possible_keys 可以使用的索引,请注意它们可能不会使用。如果查询涉及的字段有引用,则会列出该引用。当该列为NULL时,需要考虑当前的SQL是否需要调整。

key 表示MySQL在查询时使用的索引。如果没有使用索引,则显示为NULL。

TIP:如果查询中使用了覆盖索引(覆盖索引:索引覆盖了所有需要查询的数据),则该索引只会出现在key列表中。 key_length

4索引长度

ref 表示上表中的匹配条件,即用于查找参考列中的值的列或常量

rows 返回估计的集合数,即不是一个确切的值。

额外信息非常丰富,常见的有:

  1. 使用索引使用覆盖索引
  2. 使用where子句过滤结果集排序使用非排序文件使用当索引出现时列是排序的,这会消耗大量的显示。请尝试改进它。
  3. 临时使用使用临时表。 SQL优化请参考阿里巴巴开发手册
mySQL语句的性能问题 如何定位及优化?

作者:codeyuyu

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门