高性能MySQL(3th)(第六章 sql优化) —— 06 查询优化器的工作

一 优化器在MySQL架构中的位置:

二 先看逻辑上的作用

一言以蔽之:找到最好的执行计划。

 

三 静态优化和动态优化

这个和一般的编译器优化的区别差不多,静态优化即语法上的转换,替换常量等等,动态优化则要考虑实时的运行状态,选择最优的执行路线。

四 优化器常见的工作

简单的表达式中进行常量的等价替换:

MIN MAX COUNT:

外连接转化为内连接:

这里有个补充的小知识,内连接 左外连接 右外连接 全外连接 自然连接在结果上的区别,和在MySQL执行引擎运算过程上的区别。

 

连接查询时,where条件中对于连接列的限制,将会对两张都起作用,这样无论以哪张表为基础进行连接运算,该限制条件都能起到过滤的作用:

IN 的优化:

我们先从OR来认识一下where字句的过滤作用:

这里先不看为主键(索引)的id,只将其看作普通的一列,OR的过滤作用是这样的:

先按 type的方式(上例中是走全表扫描)进行扫描,对每一条记录,用where条件去筛选即判断是否符合该条件。对于多个OR而言,其实就是遍历这个OR序列,有一个满足则将该记录加入结果集,故复杂度为O(n)。

而就如上面的文字截图所述,MySQL对IN做了优化,将IN内的数值进行大小排序,这样扫描到一条记录时,就不用顺序遍历地去判断该值是否存在,直接走二分查找,复杂度为log(n),当然,这个对于IN有很多值时二者的效率区别才会显现出来。

 

 

其他的还有,但是这里不再展开:

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值