条件化简
## 移除不必要的括号
((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子句合并起来。
外连接消除
具体可以先看连接查询
内连接的驱动表和被驱动表的位置可以相互转换,而左(外)连接和右(外)连接的驱动表和被驱动表是固定的。
这就导致内连接可能通过优化表的连接顺序来降低整体的查询成本,而外连接却 无法优化表的连接顺序。外连接和内连接的本质区别就是:对