mysql> explain SELECT type, expire_date, id FROM test WHERE ul='11111' AND type=3 AND price BETWEEN 80 AND 80.999;+----+-------------+-------------------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------------------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+| 1 | SIMPLE | test| NULL | range | idx_id_type | idx_id_type | 778 | NULL | 1 | 100.00 | Using index condition |+----+-------------+-------------------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+1 row in set, 1 warning (0.00 sec)11.filtered:此查询条件所过滤的数据的百分比,表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例;越大表示存储引擎返回给server层的都是有用的,故说明效率较高,通常都是100%;
12.Extra:此处执行的额外信息,一次SQL查询的Extra可以包含以下的一条或多条,包括:
- Using where:表示SQL语句存在WHERE条件,不是获取全表数据,一般使用了WHERE条件都会有这个;
- Using index:表示使用覆盖索引返回数据,不需要访问表,通常是指该查询性能较好;
- Using index condition:这个是在5.6版本后加入的新特性,主要作用是当WHERE中的某个条件对应的字段,如a,是加了索引的,但是无法使用,如使用了 a like ‘%abc%’ 这种SQL,在没有这个特性之前,存储引擎此时无法使用这个字段对应的索引了,需要回表找到符合WHERE其他条件的数据行,即full row正行数据,然后传给server层,最后在server层处理a like '%abc%'这个条件,即使a这个字段加了索引,这样就存储引擎就需要读取较多的数据行和传给server层较多的数据 。拥有这个特性之后,存储引擎层会使用索引来处理a like '%abc%'这个SQL,进一步过滤,从而减少回表查询的次数和传给server层的数据量;详见官方文档:8.2.1.5 Index Condition Pushdown Optimization
- ,如下为详细例子:
文章插图
- Using temporary:表示使用了临时表来进行分组、排序或者多表join,通常表示查询效率不高,需要优化;
- Using filesort:表示需要使用一个外部文件索引来对结果进行排序,而不是直接根据内部索引顺序从表中读取数据,这个过程通常需要消耗比较大的CPU资源,需要优化 。
【MySQL的查询性能分析神器:explain命令的使用详解】
推荐阅读
- C语言的位级运算
- Python中的高阶函数
- 数据库并发2万就跪了?你需要这份指导性的知识框架
- 学习黑客入侵一定要知道的DOS命令
- 梦见跑的飞快还能飞起来 梦见自己跑很快像飞起来了
- 获取用户真实的ip地址
- 生男生女2022年的清宫表 2022年生男生女清宫图表最准确版
- 国内顶尖大佬整理的Python入门教程完整版!懂中文就能学会
- 林生斌个人介绍 林生斌的出生日期
- Linux命令存放目录bin的体系结构分析