【数据库复习】SQL的逻辑

SQL

写在前面的话

本文是本学渣因为考试需要写的一篇总结,只总结了需要考察的考点,所以可能有的内容引申的不多,请见谅。

一、本节考点

  1. 从之前的线上考试中抽一组题考sql
  2. 基本逻辑:查询优化器是怎么工作的,其中的步骤
    包括基于成本的优化器,基于规则的优化器的整个优化过程,比如:
    先是怎么做语义的检查,软解析硬解析等内容,最后形成一个二进制plan代码,整个过程中谁花的功夫最多

二、查询优化器的相关概念

优化器是sql分析和执行的优化工具,它负责制订sql的最高效的执行计划,基于关系理论给予用户无损原始查询的等效变换。

优化:在数据处理的真正被执行的时候发生

不同查询表达式在不同环境,经过查询优化器的优化后下效率千差万别

三、基于规则的优化器RBO

**概念:**就是在优化器里面嵌入若干种规则,执行的sql语句符合哪种规则,则按照哪种规则制订出相应的执行计划。

例如:表上有个索引,如果谓词上有索引列的存在,根据规则一定会选择走索引,否则选择走全表扫描。

四、基于成本的优化器CBO

CBO优化器会计算使用不同的执行计划的成本,并选择成本最低的一个,以获得最大的吞吐量最快的初始响应时间

五、SQL的执行顺序

SQL语言的执行顺序如下:

  1. 语义语法检查:然后进入查询的缓存
  2. 解析 :对每一次表达式进行变换,生成各种解析树并评估,选择最优路径形成执行计划,最消耗资源的过程
  3. 执行计划:形成一个二进制的plan代码,抛入执行引擎中
  4. 执行引擎
  5. 存储引擎
  6. 数据库:执行引擎利用存储引擎在数据库中查询相关内容并返回

六、相关注意事项

需要注意的两点:

  1. 不同sql写法会对查询优化器最终选择结果产生影响
  2. 查询优化器不知道一些只有程序员才知道的影响效率的信息,如:
    • sql写错了,如想查A结果写的是查B
    • 关系理论只管最终表达式的正确性,但是中间结果需要大开销,这个部分查询优化器很难判断
    • sql包含太多关系操作,无法优化掉

查询优化器基于两个条件:程序员写的sql(优化的前提)和关系代数的等价变换(优化的基础)。也会有权衡和判断的失误