MySQL中EXPLAIN解释命令及用法示例分析
1.场景描述:同事教我如何在mysql中使用explain,于是我查看了返回内容的含义。
2.现将有用的内容记录如下:
1、explain展示了mysql如何使用索引来处理select语句和join表。它可以帮助选择更好的索引并编写更优化的查询语句。
要使用,只需在 select 语句前添加说明即可:
explain select count(DISTINCT uc_userid) as user_login from user_char_daily_gameapp_11 where uc_date > = "2017 -09-04" and uc_date<="2017-09-08" AND uc_date >= "2017-06-01" LIMIT 1
2、EXPLAIN列的解释:
table:显示这行数据是关于哪个表的
type:这是一个重要的列,显示使用的连接类型。连接类型从最好到最差是 const、eq_reg、ref、range、indexhe 和 ALL
possible_keys:显示可能应用于此表的索引。如果为空,则不可能有索引。您可以从相关域的WHERE语句中选择合适的语句
key:实际使用的索引。如果为 NULL,则不使用索引。极少数情况下,MYSQL 会选择未优化的索引。在这种情况下,可以在 SELECT 语句中使用 USE INDEX(indexname) 来强制使用索引,或者使用 IGNORE INDEX(indexname) 来强制 MYSQL 忽略索引
key_len:使用的索引的长度。在不损失准确性的情况下,长度越短越好
ref:显示使用索引的哪一列,如果可能的话,使用常量
rows: MYSQL认为必须检查的行数才能返回请求的数据
Extra:有关MYSQ如何进行的额外信息L 解析查询。将在表4.3中讨论,但是这里可以看到的不好的例子是Usingtemporary和Usingfilesort,这意味着MYSQL根本无法使用索引,结果就是检索会非常慢
< p>3、extra column返回描述的含义Distinct:一旦MYSQL找到与行并集匹配的行,就不再搜索
p>
不存在:MYSQL优化的LEFT JOIN,一旦找到符合LEFT JOIN条件的行,就不再搜索
每条记录检查的范围(索引图:#) :没有找到理想的索引,因此对于前一个表中的每个行组合,MYSQL 检查使用了哪个索引并使用它从表中返回行。这是使用索引最慢的连接之一
使用文件排序:当您看到此情况时,查询需要优化。 MYSQL 需要额外的步骤来发现如何对返回的行进行排序。它根据连接对所有行进行排序on类型和
存储排序键值和匹配条件的行指针
使用索引:列数据是从刚刚使用的信息中获取的返回索引而不读取实际操作。当表的所有请求列都属于同一索引时,就会发生这种情况
使用临时查看此时,需要优化查询。这里,MYSQL需要创建一个临时表来存储结果。这种情况通常发生在对不同列集执行 ORDER BY 而不是 GROUP BY 时。
Where 使用时使用 WHERE 子句来限制哪些行将与下一个表匹配或返回给用户。如果您不想返回表中的所有行并且联接类型为
ALL 或索引,或者查询存在问题,则可能会发生这种情况。不同连接类型的说明(按效率排序)
系统表只有一行:系统表。这是 const connectio 的特例n type
const:表中能够匹配本次查询的记录的最大值(索引可以是主键,也可以是唯一索引)。因为只有一行,所以这个值实际上是一个常量,因为
MYSQL先读取这个值,然后把它当作常量
eq_ref:在连接中、MYSQL在查询时,从上一张表中,每条记录并集从表中读取一条记录,当查询使用索引作为主键或者只有一个键时使用。
一个键
ref:仅当查询使用的键不是唯一键或主键,或者是这些类型之一的一部分(例如,使用最左边的前缀)时,才会出现此连接类型。对于前一个表的每个行连接,将从表中读取所有记录。此类型在很大程度上依赖于基于索引匹配的记录数量 - 越少越好
范围:此连接类型使用索引返回一系列行,就像使用 > 或<找东西案例
index:该连接类型对上表中的每条记录执行全扫描(比ALL好,因为索引一般小于表数据)
ALL :此连接类型对每个先前记录执行完整扫描。这一般是不好的,应该尽量避免
关于《MySQL中的EXPLAIN解释命令及用法》这篇文章就分享到这里。希望以上内容能够对大家有所帮助,让大家能够学到更多的知识。如果您觉得文章不错,请转发出去,让更多的人看到。 。
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > MySQL中EXPLAIN解释命令及用法示例分析