explAIn关键字可以模拟优化器执行 SQL 查询语句 , 从而知道 MySQL 是如何处理 SQL 语句的 。分析查询语句或表结构的性能瓶颈 。执行语句:explain + SQL语句 。表头信息如下:

文章插图
【SQL调优之Explain关键字详解】explain各个字段代表的意思
- id :select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序 。
- select_type :查询类型 或者是 其他操作类型 。
- table :正在访问哪个表 。
- partitions :匹配的分区 。
- type :访问的类型 。
- possible_keys :显示可能应用在这张表中的索引,一个或多个 , 但不一定实际使用到 。
- key :实际使用到的索引,如果为NULL,则没有使用索引 。
- key_len :表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度 。
- ref :显示索引的哪一列被使用了,如果可能的话,是一个常数,哪些列或常量被用于查找索引列上的值 。
- rows :根据表统计信息及索引选用情况,大致估算出找到所需的记录所需读取的行数 。
- filtered :查询的表行占表的百分比 。
- Extra :包含不适合在其它列中显示但十分重要的额外信息 。
id 相同: 执行顺序由上而下:
explain select t2.* from t1,t2,t3 where t1.id = t2.id and t1.id = t3.id and t1.other_column = '';- 1.

文章插图
id 不同: 如果是子查询,id 序号会递增 , id 越大优先级越高 , 越先被执行 。
explain select t2.* from t2 where id = (select id from t1 where id = (select t3.id from t3 where t3.other_column = ''));- 1.

文章插图
id 相同不同同时存在: id 如果相同 , 可以认为是一组 , 由上往下执行;在所有组里 id 越大 , 优先级越高,越先执行 。
explain select t2.* from (select t3.id from t3 where t3.other_column = '') s1,t2 where s1.id = t2.id;- 1.

文章插图
select_type 字段主要用于区别普通查询、联合查询、子查询等的复杂程度 。
SIMPLE: 简单的 select 查询,查询中不包含子查询或者 UNION 。
PRIMARY: 查询中若包含任何复杂的自查询,最外层查询为 PRIMARY 。

文章插图
SUBQUERY: 在 SELECT 或 WHERE 中包含子查询 。
UNCACHEABLE SUBQUERY:一个子查询的结果不能被缓存,必须重新评估外链接的第一行 。
DERIVED: 在 FROM 列表中包含的子查询被标记为 DERIVED(衍生)MySQL 会递归执行这些子查询,把结果放进临时表 。

文章插图
UNION: 若第二个 SELECT 出现在 UNION 之后,则被标记为 UNION,若 UNION 包含在 FROM 子句的子查询,则外层SELECT 将被标记为 DERIVED 。
UNION RESULT: 从 UNION表中获取结果的 SELECT 。
table字段显示这行数据是关于那张表

文章插图
type字段首先说一下这个字段,要记住以下10个状态,(从左往右,越靠左边的越优秀)
NULL > system > const > eq_ref > ref > ref_or_null > index_merge > range > index > ALL- 1.
推荐阅读
- Python之Redis操作
- PostgreSQL到底好不好?为什么互联网公司不敢用呢?
- 《无所畏惧》:方丽虹与韩之通交手,躲在背后的人才是最大赢家
- 59岁关之琳被偶遇,皮肤无暇但脸太僵,回春技术被质疑是缅北功劳
- 云顶之弈福星有哪些英雄,云顶之弈福星拉夫是什么阵容
- 戒烟一个月后脸的变化 戒烟一个月之后身体的变化真吓人
- 千里之行的下一句,歇后语关公门前耍大刀和千里之行的后半句是
- 宋轶与白敬亭的低调之恋,究竟隐藏着什么秘密?
- 情侣送礼物送什么好呢 情侣之间有意义的礼物
- 皮提亚之墓的石碑在哪
