暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
14不好看就要多整容 —— MySQL 基于规则的优化(内含关于子查询优化二三事儿)(02).pdf
232
47页
16次
2022-03-14
免费下载
标签 MySQL 是怎样运⾏的
⼤家别忘MySQL质上是⼀个软件,设计MySQL⼤叔并不能要
使⽤这个软件的⼈个个都是数据库⾼⾼⼿,就像我写这本书的时候并
不能要求各位在学之前就会了⾥边⼉的知识。
吐槽⼀下:都会了的⼈谁还看呢,难道是为了精神上受感化
也就是说我们⽆法避免某些同学写⼀些执⾏起来⼗分耗费性能的
句。即使是这样,设计MySQL的⼤叔还是依据⼀些规则,竭尽全⼒
把这个很糟糕的语句转换成某种可以⽐较⾼效执⾏的形式,这个过程
也可以被称作查询重写(就是⼈家觉得你写的语句不好,⾃⼰再重写
⼀遍)。本章详细唠叨⼀下⼀些⽐较重要的重写规则。
条件
我们编写的查询语句的搜索条件本质上是⼀个表达式,这些表达式可
能⽐较繁杂,或者不能⾼效的执⾏,MySQL的查询优化器会为我们
化这些表达式。为了⽅便⼤家理解,我们后边举例⼦的时候都使⽤诸
abc之类的简单字⺟代表某个表的列名。
移除不必要的
有时候表达式⾥有许多⽆⽤的括号,⽐如这样
((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
当这个表达式和其他涉及列a的表达式使⽤AND连接起来时,可以
其他表达式中a值替换为5⽐如这样
a = 5 AND b > a
就可以被转换为:
a = 5 AND b > 5
⼩贴⼠:
为啥OR连接起来的表达式就不能进⾏常量传递呢?⾃⼰想想哈
等值传递equality_propagation
有时候多个列之间存在等值匹配的关系,⽐如这样
a = b and b = c and c = 5
这个表达式可以被简化为:
a = 5 and b = 5 and c = 5
移除没⽤的条trivial_condition_removal
对于⼀些明显永远TRUEFALSE的表达式,优化器会移除掉
们,⽐如这个表达式:
of 47
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜