MySQL Query Optimizer是什么?

MySQL系统架构一文中,曾介绍过MySQL整体架构为两层架构,其中SQL Layer层中有个模块是专门负责查询优化的。今天,我们介绍的MySQL Query Optimizer,即为MySQL的查询优化器。

查询优化器,专门负责优化SELECT语句。其主要的功能是通过计算分析系统中收集的各种统计信息,为客户端请求的Query给出最优的执行计划,也就是最高效的数据检索方式。

当客户端向MySQL请求一条Query时,命令解析器模块完成请求分类,如果是SELECT类型的Query,则转发给MySQL Query Optimizer,这时MySQL Query Optimizer通常会完成以下几个事情:

首先,MySQL Query Optimizer会对整条Query进行优化,处理掉一些常量表达式的预算,直接换算成常量值。

其次,会对Query中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等。

最后,提取整个Query的线索,依据线索判定是否可以完全确定本次Query的执行计划。如果当前的线索不足以确定执行计划,则会读取本次Query所涉及对象的统计信息,根据Query进行相应的计算分析,然后得出最后的执行计划。

介绍起来虽然简单,但是实际情况却并不简单,每次查询MySQL Query Optimizer内部都要经过复杂的运算分析,最终才能得出最优的执行计划。

顺便提一句,不仅是MySQL,在所有关系型数据库中,Query Optimizer都是一个数据库软件非常核心的功能。

想要了解更多的MySQL Query Optimizer 信息,大家可参考MySQL Internal

程序员日常

《解忧杂货店》读后感:

一句话概括“东野圭吾的一本时空交错、多线索叙述的高浓度鸡汤。”

这本书的口碑很好,无论是在豆瓣,还是京东的评论里。

但是,读完之后,感觉并没有给自己留下什么,或许是自己期望太高。

唯一的收获就是“书评不可靠,哪怕所有人都说好”。

扫码关注李苦李公众号

李苦李公众号

标签: 存储, 数据库, 性能优化