【数据库复习】SQL的逻辑
SQL
写在前面的话
本文是本学渣因为考试需要写的一篇总结,只总结了需要考察的考点,所以可能有的内容引申的不多,请见谅。
一、本节考点
- 从之前的线上考试中抽一组题考sql
- 基本逻辑:查询优化器是怎么工作的,其中的步骤
包括基于成本的优化器,基于规则的优化器的整个优化过程,比如:
先是怎么做语义的检查,软解析硬解析等内容,最后形成一个二进制plan代码,整个过程中谁花的功夫最多
二、查询优化器的相关概念
优化器是sql分析和执行的优化工具,它负责制订sql的最高效的执行计划,基于关系理论给予用户无损原始查询的等效变换。
优化:在数据处理的真正被执行的时候发生
不同查询表达式在不同环境,经过查询优化器的优化后下效率千差万别
三、基于规则的优化器RBO
**概念:**就是在优化器里面嵌入若干种规则,执行的sql语句符合哪种规则,则按照哪种规则制订出相应的执行计划。
例如:表上有个索引,如果谓词上有索引列的存在,根据规则一定会选择走索引,否则选择走全表扫描。
四、基于成本的优化器CBO
CBO优化器会计算使用不同的执行计划的成本,并选择成本最低的一个,以获得最大的吞吐量或最快的初始响应时间。
五、SQL的执行顺序
SQL语言的执行顺序如下:
- 语义语法检查:然后进入查询的缓存
- 解析 :对每一次表达式进行变换,生成各种解析树并评估,选择最优路径形成执行计划,最消耗资源的过程
- 执行计划:形成一个二进制的plan代码,抛入执行引擎中
- 执行引擎
- 存储引擎
- 数据库:执行引擎利用存储引擎在数据库中查询相关内容并返回
六、相关注意事项
需要注意的两点:
- 不同sql写法会对查询优化器最终选择结果产生影响
- 查询优化器不知道一些只有程序员才知道的影响效率的信息,如:
- sql写错了,如想查A结果写的是查B
- 关系理论只管最终表达式的正确性,但是中间结果需要大开销,这个部分查询优化器很难判断
- sql包含太多关系操作,无法优化掉
查询优化器基于两个条件:程序员写的sql(优化的前提)和关系代数的等价变换(优化的基础)。也会有权衡和判断的失误