MySQL子查询优化---详解--3
来源:互联网 发布:兰大网络继续教育学院 编辑:程序博客网 时间:2024/05/16 09:01
五 进一步挖掘
1 MySQL仅仅是用半连接/物化/EXISTS策略来优化子查询的吗?
Convert the subquery to a join, or use table pullout and run the query as an inner join between subquery tables and outer tables. Table pullout pulls a table out from the subquery to the outer query.
这表明MySQL是可以把子查询优化为连接操作的(这是一种特例:把半连接进一步优化为连接,需要子查询的目标列为唯一键,如outer_expr IN (SELECT field_primary_key...))。
2 三种优化策略之间的关系
2.1 默认使用半连接进行优化,可以使用“set optimizer_switch='semijoin=off';”命令关闭半连接策略。
2.2 如果半连接参数关闭,则可以使用物化策略或EXISTS策略,使用哪种,由decide_subquery_strategy()函数决定,此函数调用compare_costs_of_subquery_strategies()函数进行两种策略的代价计算,决定选用代价小的优化策略。可以使用“set optimizer_switch='materialization=off'; ”命令关闭物化策略,进而指示MySQL优化器使用EXISTS策略。
3 如何区分是使用了哪种优化策略?
策略名称 | 查询执行计划显示项 | 值 | 说明 |
半连接策略 | SHOW WARNINGS命令显示内容 | semi join | |
物化策略 | select_type | SUBQUERY/SIMPLE | |
SHOW WARNINGS命令显示内容 | <materialize>(query fragment) | 非半连接的物化,即物化策略中的物化 | |
select_type | MATERIALIZED | 被物化策略物化的子查询 | |
EXISTS策略 | select_type | DEPENDENT SUBQUERY | DEPENDENT说明了依赖的关系,EXISTS策略把子查询变为了相关子查询 |
- MySQL子查询优化---详解--3
- MySQL子查询优化---详解--1
- MySQL子查询优化---详解--2
- mysql子查询优化
- mysql 子查询优化
- Mysql子查询优化技术
- 优化mysql标量子查询
- MySQL子查询效率优化
- MySQL子查询的优化
- Mysql 子查询效率优化
- mysql in() 子查询 优化
- 【mysql 性能优化篇】优化子查询
- mysql in 子查询 效率慢 优化
- 【mysql】关联子查询的一种优化
- mysql in 子查询 效率慢 优化
- mysql中in子查询效率优化
- mysql in 子查询 效率慢 优化
- mysql in 子查询 效率慢 优化
- 各种”xxx“ native gem required installed build tools 报错
- MySQL子查询优化---详解--1
- MySQL子查询优化---详解--2
- 伪类和伪元素的区别
- Fragment详解之五——Fragment间参数传递
- MySQL子查询优化---详解--3
- TextView控件之部分文本内容设置前景、背景色等
- 唯一性使用(Exploiting Uniqueness)优化技术,在MySQL中的应用
- MySQL多表连接算法的一点说明
- .NET Core 1.1日期解析无APi、SQL Server数据转换JSON
- MySQL查询优化UNION操作一例
- Java二十四中设计模式 之 状态模式
- MySQL连接算法的问答辨析并与Oracle简单对比
- MYSQL,临时表优化一例