SQL优化-查询语句特征(5)EXPLAIN

本文详细介绍了SQL查询优化的方法,包括EXPLAIN语法的使用及其各属性的意义,如ID、select_type、type等,帮助读者理解如何通过调整查询语句来提高数据库查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EXPLANIN

用法

EXPLAIN SELECT * FROM DEPT JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO

ID

EXPLANIN 中的id属性指出 当前查询语句中相关表文件的加载顺序

情况1
如果被加载的表文件的ID属性内容是相同的 则根据自上而下的顺序执行
情况2
如果被加载的表文件ID属性内容是不相同的。则ID较大的表,就先被加载 ,ID小的表则后被加载
情况3
如果被加载的表文件 有相同 有不同的情况时 则ID大的表先被加载 ID相同则自上而下加载。

总结:ID相同 自上而下 不同则大优先

select_type

SIMPLE 简单的查询
Primary 可能是联合查询 也可能是子查询 指向的外部查询语句或者是联合查询中的第一个子查询

DEPENDENT SUBQUERY

(依赖子查询)

SUBQUERY

(独立子查询)

TYPE 属性

  1. all 全表扫描
  2. index 定位数据行的时候没有使用索引 全表扫描, 但已经在已经定位的数据行中读取字段时候,却是使用索引,也就是说 使用select 命令时 根据索引读取数据 (执行效率低)
  3. range 定位数据行,使用 到索引 使用区间定位的方式 (where score>60) 这种状态实际上是不稳定的状态 如果定位的数据行 超过了表中行数30%以上 导致mysql放弃使用索引进行定位
  4. ref:定位数据行的时候采用索引,采用直等的方式 where ename=‘mike’ 同时满足定位条件的数据行 只有一行。
  5. const:定位数据行,使用到索引,采用主键索引直等方式 where score = 60
  6. (少见)system 操作表里面只有一行数据,并且数据的内容是固定不变的

SQL优化时 最低要达到range级别 最高达到 ref

possible keys: 本次查询中可能使用的索引有哪些

key:在本次查询中 实际使用索引有哪些 当要使用多个索引时 mysql会使用性能最高的那个索引

key len 表示当前采用索引字段的字段长度 越长说明定位越准,越短 定位越不准确

索引使用规则
注意!
1.如果在索引字段上使用了函数 ,则会导致索引失效
2.索引字段上使用了相关的运算 索引会失效
3.如果索引字段上 产生了(隐式类型转换),导致索引失效。 就是 varchar = int 类似这样的。

如果索引字段上进行了模糊查询

explain select * form emp where ename like ‘m%explain select * form emp where ename like%m’
explain select * form emp where ename like%m%

4.只支持前置条件的模糊查询 ( 只有第一条 使用到索引)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值