SQL 查询优化器课程学习记录 | 青训营笔记

291 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第一天

一、本堂课重点内容:

  1. 大数据体系介绍、SQL基本用法、执行计划、基本流程讲解;

  2. 查询优化器介绍;

  3. 查询优化器的社区开源实践;

二、详细知识点介绍:

结构化查询语言(Structured Query Language,SQL)

结构化查询语言(Structured Query Language,SQL)是一种功能强大的数据库语言。它基于关系代数运算,功能丰富、语言简洁、使用方便灵活,已成为关系数据库的标准语言。

SQL语句执行过程

image.png image.png

SQL优化

  • 根据上图的SQL语句执行过程来看,优化器是最复杂的一部分。负责将提交的SQL语句根据各种判断标准,制定最优的执行计划,并交由执行器来最终执行。

  • SQL优化的核心思想就是想方设法减少SQL的物理I/O次数

  • SQL优化通常包括两项工作:一是逻辑优化,二是物理优化。查询优化的理论基础是关系代数。

  • 在逻辑优化阶段主要解决的问题是:由于一条查询语句结构复杂,包含多种子句类型,根据表的一些属性信息(如索引、约束)找出SQL语句等价的变换形式,使得执行更高效。

  • 在物理优化阶段主要解决的问题是:哪种单表扫描方式最优?(全表扫描、索引扫描的各种细分类型)两表、多表连接的顺序如何最优?(考虑两表之间的连接语义(内连接、外连接等))通过动态规划算法和遗传算法,并依据代价估算模型,对每一个可能的执行方式进行评估,挑出代价最小的作为最优的计划。

常见的查询优化器

  • 基于规则的优化器(Rule Based Optimizer,RBO)

根据经验或一些已经探知或被证明有效的方式,定义为“规则”(如根据关系代数知识、优化经验等)用这些规则化简查询计划中的操作。

  • 基于成本的优化器(Cost Based Optimizer,CBO)

对各种可能的情况进行量化比较,从而可以得到花费最小的情况。

image.png

  • RBO 优化规则

    • 列裁剪
    • 谓词下推
    • 传递闭包:一些比较操作符,如<、>等,具有传递性,可以起到化简表达式的作用
    • Runtime Filter(min-max filter,in-list filter,bloom filter)
    • Join 消除
    • 谓词合并

查询优化器的社区开源实践

image.png

Apache Calcite

  • One size fits all:统一的SQL查询引l擎模块化,插件化,稳定可靠
  • 支持异构数据模型
  1. 关系型
  2. 半结构化
  3. 流式 地理空间数据
  • 内置RBO和CBO

三、引用参考&推荐书目

  • 《SQL进阶教程》
  • 《数据库查询优化器的艺术:原理解析与SQL性能优化》
  • 《SQL优化核心思想》
  • juejin.cn/post/709069…