社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

MySQL EXPLAIN 详解

数据库开发 • 7 年前 • 1107 次点击  

(点击上方公众号,可快速关注)


来源:高广超

www.jianshu.com/p/ea3fc71fdc45

如有好文章投稿,请点击 → 这里了解详情


MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,本文主要讲解explain命令的使用及相关参数说明。


EXPLAIN Output Columns



id


id是用来顺序标识整个查询中SELELCT 语句的,在嵌套查询中id越大的语句越先执行。该值可能为NULL,如果这一行用来说明的是其他行的联合结果。


select_type


表示查询的类型



table


对应行正在访问哪一个表,表名或者别名


  • 关联优化器会为查询选择关联顺序,左侧深度优先


  • 当from中有子查询的时候,表名是derivedN的形式,N指向子查询,也就是explain结果中的下一列


  • 当有union result的时候,表名是union 1,2等的形式,1,2表示参与union的query id


注意:MySQL对待这些表和普通表一样,但是这些“临时表”是没有任何索引的。


type


type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:


system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL ,一般来说,得保证查询至少达到range级别,最好能达到ref。



possible_keys


显示查询使用了哪些索引,表示该索引可以进行高效地查找,但是列出来的索引对于后续优化过程可能是没有用的


key


key列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。


key_len


key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好 。


ref


ref列显示使用哪个列或常数与key一起从表中选择行。


rows


rows列显示MySQL认为它执行查询时必须检查的行数。注意这是一个预估值。


Extra


Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。





看完本文有收获?请转发分享给更多人

关注「数据库开发」,提升 DB 技能


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/y6eVXdUEfx
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2804
 
1107 次点击