sql EXPLAIN 详解 type\rows

Explain

MySql提供了Explain命令,它可以对你的sql语句进行分析,返回你的sql执行的详细信息,以供开发人员针对性进行优化

我们可以查看该sql是否使用索引、是否做全表扫描、性能瓶颈、执行的效率怎么样…等等

EXPLAIN介绍

EXPLAIN 指令提供了 MySQL 如何执行一条 SQL 语句的信息。通过使用 EXPLAIN,我们可以查看 SQL 语句的执行方式,进而排查 SQL 语句的瓶颈,然后进行优化。

Explain语法

Explain [ select语句 ]

示例

  • 例如分析一条select语句

请添加图片描述

我是用的Navicat软件运行的sql语句,explain 出来的信息有12列,下面我会列出来我常用到的:

select_type

查询过程中,每个select句子的类型

  • Simple 简单select,不使用union或子查询等
  • Primary 查当存在子查询时,最外层的select永远被标记为Primary主查询
  • Union union中第二个语句或后面的select语句
  • Dependent Union union中第二个语句或后面的select语句,独立于外部查询
  • Union Result Union结果,连接几个表查询后的结果
  • SubQuery 子查询中的第一个select
  • Dependent SubQuery 子查询中的第一个select,取决于外面的查询
  • Derived 子查询在from子句中,MySql会把结果放在临时表中
  • Uncacheable SubQuery 一个子查询的结果不能被缓存,必须重新评估外链接的第一行

type

常见的扫描方式
扫描方式由快到慢: System > Const > eq_ref > ref > range > index > All

  • System 系统表,少量数据(mysql服务启动时已加载在内存中,不需要进行磁盘IO)
  • Const 常量连接(最多之返回一行数据,速度快)
  • eq_ref 主表索引 或 非空唯一索引 等值扫描
  • ref 非主键非唯一索引(普通非唯一) 等值扫描
  • range 范围扫描(索引上范围查询,在索引上扫码特定范围的值)
  • index 索引树扫描(扫描索引上全部数据,仅比All扫描快一点)
  • All 全表扫描(如果id不建索引,则全表扫描)

rows

表示MySQL根据表统计信息及索引选用情况,估算找到结果集 需要扫描读取数据的行数。

  • 原则上,rows越少越好
  • 被扫描的行数,该数值越大,意味着需要扫描的行数,相应的耗时更长。
  • 需要注意的是,输出的rows只是一个估算值,不能完全对其百分百相信




推荐内容



  • MySql . Concat_WS()函数
    通过分隔符,将2个及多个字段元素顺序拼接在一起,返回拼接后的字符串。

  • MySql . Field()函数
    返回一个指定的值 在给定的列表中的 索引(排序、数据优先级)。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQLEXPLAIN语句用于分析和优化查询语句的执行计划。通过执行EXPLAIN语句,你可以了解MySQL是如何处理你的查询,包括表的访问顺序、使用的索引、连接方式等。 下面是使用EXPLAIN语句来优化SQL查询的步骤: 1. 确定要优化的查询语句。可以使用SELECT语句来查询数据,然后在该语句前加上EXPLAIN关键字。例如:EXPLAIN SELECT * FROM table_name WHERE condition; 2. 执行EXPLAIN语句,并查看结果。执行EXPLAIN后,MySQL会返回一张表格,其中包含了查询的执行计划信息。这些信息可以帮助你分析查询的性能瓶颈。 3. 分析执行计划信息。在执行计划信息表格中,你可以关注以下几个重要的列: - id: 查询的唯一标识符。多表查询时,每个表都有一个唯一标识符。 - select_type: 查询类型。包括简单查询、联接查询、子查询等。 - table: 查询涉及的表名。 - type: 表示MySQL访问表的方式,常见的有ALL、index、range、ref等。 - possible_keys: 表示可能使用的索引。 - key: 实际使用的索引。 - rows: 估计扫描的行数。 - Extra: 额外的信息,如是否使用了临时表、是否使用了文件排序等。 4. 根据执行计划信息来进行优化。根据查询的复杂性和性能要求,你可以采取以下一些优化措施: - 确保表中的列上有适当的索引。 - 使用JOIN语句时,确保连接条件上有索引。 - 避免在查询中使用通配符(如SELECT *)。 - 尽量减少子查询的使用。 - 优化WHERE条件,尽量避免使用OR、NOT等复杂的逻辑判断。 - 使用合适的数据类型,避免不必要的数据类型转换。 通过不断地执行EXPLAIN语句,分析执行计划信息,并针对性地进行优化,你可以提高查询的性能并减少数据库的负载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元气小羊.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值