赞
踩
目录
explain:使用EXPLAIN关键字可以模拟优化器执行SQL select语句
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| 1 | SIMPLE | t_order | ALL | NULL | NULL | NULL | NULL | 100453 | 100.00 | Using where |
SELECT识别符。这是SELECT的查询序列号,以下是三种情况:
<derived2>
,这里指的是指向id为2的表,即t3表的衍生表输出的行所引用的表
对表访问方式,表示MySQL在表中找到所需行的方式,又称“访问类型”,按照从最佳类型到最坏类型进行排序
指出MySQL能使用哪个索引在该表中找到行
显示MySQL实际决定使用的键(索引)。必然包含在possible_keys中,如果没有选择索引,键是NULL。
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)。如果键是NULL,则长度为NULL。
显示使用哪个列或常数与key一起从表中选择行。
估算出结果集行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
显示了通过条件过滤出的行数的百分比估计值。
该列包含MySQL解决查询的详细信息,有以下几种情况:
DUAL
单纯为了方便声明了SELECT
,需要使用FROM
或者其他子句的时候。MySQL可能忽略这些子句。如果没有指定表,MySQL不需要FROM DUAL
。)
- # like 模糊查询 前模糊或者 全模糊不走索引
- explain select * from users u where u.name like '%mysql测试'
-
- # or 条件中只要有一个字段没有索引,改语句就不走索引
- explain select * from users u where u.name = 'mysql测试' or u.password ='JspStudy'
-
- # 使用 union all 代替 or 这样的话有索引例的就会走索引
- explain
- select * from users u where u.name = 'mysql测试'
- union all
- select * from users u where u.password = 'JspStudy'
-
- # in 走索引
- explain select * from users u where u.name in ('mysql测试','JspStudy')
-
- # not in 不走索引
- explain select * from users u where u.name not in ('mysql测试','JspStudy')
-
- # is null 走索引
- explain select * from users u where u.name is null
-
- # is not null 不走索引
- explain select * from users u where u.name is not null
-
- # !=、<> 不走索引
- explain select * from users u where u.name <> 'mysql测试'
-
- # 隐式转换-不走索引(name 字段为 string类型,这里123为数值类型,进行了类型转换,所以不走索引,改为 '123' 则走索引)
- explain select * from users u where u.name = 123
-
- # 函数运算-不走索引
- explain select * from users u where date_format(upTime,'%Y-%m-%d') = '2019-07-01'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。