01.条件化简
我们编写的查询语句的搜索条件本质上是一个表达式,这些表达式可能比较繁杂,或者不能高效的执行, MySQL的查询优化器会为我们简化这些表达式。为了方便大家理解,我们后边举例子的时候都使用诸如 a 、 b 、 c 之类的简单字母代表某个表的列名。
1.1 移除不必要的括号
1.2 常量传递(constant_propagation)
1.3 等值传递(equality_propagation)
1.4 移除没用的条件(trivial_condition_removal)
1.5 表达式计算
1.6 HAVING子句和WHERE子句的合并
1.7 常量表检测
02.外连接消除
03.子查询优化
我们的主题本来是唠叨 MySQL 查询优化器是如何处理子查询的,但是我还是有一万个担心好多同学连子查询的语法都没掌握全,所以我们就先唠叨唠叨什么是个子查询(当然不会面面俱到啦,只是说个大概哈),然后再唠叨关于子查询优化的事儿。
3.1子查询语法
想必大家都是妈妈生下来的吧,连孙猴子都有妈妈——石头人。怀孕妈妈肚子里的那个东东就是她的孩子,类似的,在一个查询语句里的某个位置也可以有另一个查询语句,这个出现在某个查询语句的某个位置中的查询就被称为 子查询 (我们也可以称它为宝宝查询哈哈),那个充当“妈妈”角色的查询也被称之为 外层查询 。不像人们怀孕时宝宝们都只在肚子里,子查询可以在一个外层查询的各种位置出现,比如: