MySQL查询优化器--表的扫描与表间连接方式
来源:互联网 发布:网络英雄洛克人第三部 编辑:程序博客网 时间:2024/06/07 17:06
基于MySQL V6.0.0 alpha。
查询优化器,物理查询优化部分,涉及单表的扫描、两表的连接算法、多表连接方式和算法(左深树、紧密树、右深树和如greedy算法等)三个重要方面。之前,描述了多表连接的算法;如下,是单表扫描和两表连接中的重要点。
MySQL在greedy算法中,混合了启发式,利用如下规则,对查询做物理优化。
类型
代码表示方式[1]
说明
system
JT_SYSTEM
常量表情况一,表上没有元组或者只有一条元组
const
JT_CONST
常量表情况二,表上有多条元组,但where子句条件限定符合条件的元组只有一条
eq_ref
JT_EQ_REF
参与连接运算的表,是内表(在代码实现的算法中,两表连接时作为循环中的内循环遍历对象,这样的表为内表)。基于索引(连接字段上存在唯一索引或主键索引,且操作符必须是“=”谓词,索引的值不能为NULL)做扫描,使得对外表的一条元组,内表只有唯一一条元组与之对应
ref
JT_REF
参与连接运算的表,是内表。基于索引(连接字段上的索引是非唯一索引,操作符必须是“=”谓词,连接字段值不可为NULL)做扫描,使得对外表的一条元组,内表只有若干条元组与之对应
ref_or_null
JT_REF_OR_NULL
类似ref,只是连接字段的值可为NULL
range
JT_RANGE
基于索引做范围扫描,为诸如BETWEEN、IN、>=、LIKE类操作提供支持
index
基于索引做扫描,但是基于索引做全部数据的扫描(扫描整个索引文件完成查询,不需要访问数据文件)
ALL
JT_ALL
不使用索引,顺序扫描,直接读取表上的数据(访问数据文件)
JT_UNIQUE_SUBQUERY
在子查询中,基于唯一索引进行扫描
JT_INDEX_SUBQUERY
在子查询中,基于除唯一索引之外的索引进行扫描
index_merge
JT_INDEX_MERGE
两表连接的每个表的连接字段上均有索引存在且索引有序
MySQL常量表的含义为:
1. 表中没有数据,或者只有一行数据(system类表)
2. 经where语句中的限制条件(“column= 常数”格式的表达式)筛选后只有一行数据;这表明,在column列上存在索引,索引列可能是一个主键列,或者是唯一键的列(constant表)
满足这2个条件之一的,就是常量表。
[1] 代码中的表示方式,可参考枚举类型“enum join_type”
- MySQL查询优化器--表的扫描与表间连接方式
- 表连接方式的分析与优化
- SQL优化--物理优化--表扫描与连接算法
- Mysql避免全表扫描sql查询优化
- Mysql避免全表扫描sql查询优化
- Mysql避免全表扫描sql查询优化 .
- MySQL查询优化:LIMIT 1避免全表扫描
- Mysql避免全表扫描sql查询优化 .
- MySQL查询优化:LIMIT 1避免全表扫描
- MySQL查询优化:LIMIT 1避免全表扫描
- Mysql怎么样避免全表扫描,sql查询优化
- Mysql避免全表扫描sql查询优化
- Mysql避免全表扫描sql查询优化
- Mysql避免全表扫描sql查询优化
- MySQL查询优化:LIMIT 1避免全表扫描
- MySQL查询优化:LIMIT 1避免全表扫描
- MySQL查询优化:LIMIT 1避免全表扫描
- Mysql避免全表扫描sql查询优化
- MySQL查询优化器源码分析--多表连接优化算法之一,optimize_straight_join()按表的指定顺序求解最优查询计划
- MySQL查询优化器源码分析--多表连接优化算法之二,find_best(),搜索表之间的各种组合以得到最优的查询计划
- MySQL查询优化器源码分析--多表连接优化算法之三,greedy_search(),搜索表之间的各种组合以得到最优的查询计划
- MySQL查询优化器源码分析--多表连接优化算法之三,best_extension_by_limited_search
- MySQL查询优化器源码分析--目录
- MySQL查询优化器--表的扫描与表间连接方式
- PostgreSQL查询代价估算(一)
- 密钥 数字证书 http https
- PostgreSQL查询代价估算(二)
- PostgreSQL查询代价估算(三)
- sizeof详解
- java.lang.UnsatisfiedLinkError: no webp-imageio in java.library.path
- 管理的本质
- osi参考模型 tcp/ip概念层