MySQL-查询-SQL简化与子查询的物化

本文探讨了MySQL查询优化的几个关键点,包括条件化简,外连接消除以及子查询的优化。重点讲解了如何通过物化子查询来提高查询效率,介绍当子查询结果不涉及全表扫描时,MySQL如何使用内存或磁盘临时表,并建立索引来加速查询。同时,列出了子查询转化为半连接(SEMI JOIN)的条件。
摘要由CSDN通过智能技术生成

条件化简

## 移除不必要的括号
((a = 5 AND b = c) OR ((a > c) AND (c < 5))) 改 (a = 5 and b = c) OR (a > c AND c < 5)
## 常量传递(constant_propagation)
a = 5 AND b > a  改 a = 5 AND b > 5
## 移除没用的条件(trivial_condition_removal)
(a < 1 and b = b) OR (a = 6 OR 5 != 5)
很明显,b = b这个表达式永远为TRUE,5 != 5这个表达式永远为FALSE,所以简化后的表达式就是这样的:
a < 1 OR a = 6
## 表达式计算 
a = 5 + 1 改成 a=6 表达式不会对带有符号或者函数的进行化简,只有搜索条件中索引列和常数使用某些运算符连接起来才可能使用到索引
##HAVING子句和WHERE子句的合并
如果查询语句中没有出现诸如SUM、MAX等等的聚集函数以及GROUP BY子句,优化器就把HAVING子句和WHERE子句合并起来。

外连接消除

具体可以先看连接查询

内连接的驱动表和被驱动表的位置可以相互转换,而左(外)连接和右(外)连接的驱动表和被驱动表是固定的。
这就导致内连接可能通过优化表的连接顺序来降低整体的查询成本,而外连接却 无法优化表的连接顺序。

外连接和内连接的本质区别就是:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值