ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Mysql优化】EXPLAIN 返回列详解:深入 SQL 查询优化的工具 [打印本页]

作者: 立山    时间: 2024-12-20 00:44
标题: 【Mysql优化】EXPLAIN 返回列详解:深入 SQL 查询优化的工具
在优化 SQL 查询时,EXPLAIN 是数据库开发中不可或缺的工具。它能展示查询的实行筹划,显现数据库优化器在访问表和索引时的具体策略。本文将详细剖析 EXPLAIN 的返回列,并通过丰富的示例和场景分析,教您如何理解和优化复杂的 SQL 查询。

什么是 EXPLAIN?

EXPLAIN 是 MySQL 提供的分析查询筹划的命令,实行后会返回一张表格,展示 SQL 查询在实际实行时会采用的策略。通太过析这些列的数据,我们可以发现:

使用方法

  1. EXPLAIN [SQL查询语句]
复制代码
例如:
  1. EXPLAIN SELECT * FROM users WHERE id = 5;
复制代码

EXPLAIN 返回的各列详解


1. id 列

id 表现查询实行的次序和嵌套条理。

常见值含义

示例:简单查询

  1. EXPLAIN SELECT * FROM users;
复制代码
效果:
idselect_typetable…1SIMPLEusers… 示例:嵌套查询

  1. EXPLAIN SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
复制代码
效果:
idselect_typetable…1PRIMARYusers…2DEPENDENT SUBQUERYorders…
2. select_type 列

select_type 表现当前查询的类型。
常见值

示例:UNION 查询

  1. EXPLAIN SELECT * FROM users UNION SELECT * FROM orders;
复制代码
效果:
idselect_typetable…1PRIMARYusers…2UNIONorders…3UNION RESULT…
3. table 列

table 表现查询涉及的表名或别名。假如查询中使用了临时表或派生表,这里会表现临时表的名称。
示例:

  1. EXPLAIN SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
复制代码
效果:
idselect_typetable…1PRIMARYusers…2SUBQUERYorders…
4. partitions 列

partitions 表现查询中涉及的表分区名称。

有的人大概不知道这个是神马,可以看看这个文章:【Mysql】数据库分区技能详解

5. type 列

type 列表现查询的访问方式,表现优化器扫描表或索引的服从。
一般来说包管range级别,最好能达到ref级别
访问方式(从低到高的服从排序)
示例:全表扫描

  1. EXPLAIN SELECT * FROM users WHERE name = 'John';
复制代码
效果:
typeExtraALLUsing where 示例:索引查询

  1. EXPLAIN SELECT * FROM users WHERE id = 1;
复制代码
效果:
typekeyconstPRIMARY
6. possible_keys 列

possible_keys 列表现查询中大概使用的索引。


7. key 列

key 列表现查询实际使用的索引。


8. key_len 列

key_len 表现优化器使用的索引字节长度。


9. ref 列

ref 列表现查询中与索引匹配的列或常量。

10. rows 列

rows 列表现查询过程中需要扫描的行数。


11. filtered 列

filtered 列表现通过查询条件过滤后保留的数据百分比。


12. Extra 列

Extra 列表现查询优化器在实行查询时的额外信息。
常见值


综合示例:复杂查询的分析

示例:子查询与联合查询

  1. EXPLAIN SELECT * FROM users u
  2. WHERE u.id IN (SELECT user_id FROM orders WHERE total > 1000)
  3. UNION
  4. SELECT * FROM archived_users;
复制代码
效果:
idselect_typetabletypekeyrowsExtra1PRIMARYusersALLNULL1000Using where2DEPENDENT SUBQUERYordersrefidx50Using where; Using index3UNIONarchived_usersALLNULL500
总结

通过对 EXPLAIN 返回列的理解和应用,我们可以辨认查询的性能瓶颈。优化 SQL 的关键是:

博客主页: 总是学不会.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4