这是我参与「第四届青训营 」笔记创作活动的的第一天
一、本堂课重点内容:
-
大数据体系介绍、SQL基本用法、执行计划、基本流程讲解;
-
查询优化器介绍;
-
查询优化器的社区开源实践;
二、详细知识点介绍:
结构化查询语言(Structured Query Language,SQL)
结构化查询语言(Structured Query Language,SQL)是一种功能强大的数据库语言。它基于关系代数运算,功能丰富、语言简洁、使用方便灵活,已成为关系数据库的标准语言。
SQL语句执行过程
SQL优化
-
根据上图的SQL语句执行过程来看,优化器是最复杂的一部分。负责将提交的SQL语句根据各种判断标准,制定最优的执行计划,并交由执行器来最终执行。
-
SQL优化的核心思想就是想方设法减少SQL的物理I/O次数
-
SQL优化通常包括两项工作:一是逻辑优化,二是物理优化。查询优化的理论基础是关系代数。
-
在逻辑优化阶段主要解决的问题是:由于一条查询语句结构复杂,包含多种子句类型,根据表的一些属性信息(如索引、约束)找出SQL语句等价的变换形式,使得执行更高效。
-
在物理优化阶段主要解决的问题是:哪种单表扫描方式最优?(全表扫描、索引扫描的各种细分类型)两表、多表连接的顺序如何最优?(考虑两表之间的连接语义(内连接、外连接等))通过动态规划算法和遗传算法,并依据代价估算模型,对每一个可能的执行方式进行评估,挑出代价最小的作为最优的计划。
常见的查询优化器
- 基于规则的优化器(Rule Based Optimizer,RBO)
根据经验或一些已经探知或被证明有效的方式,定义为“规则”(如根据关系代数知识、优化经验等)用这些规则化简查询计划中的操作。
- 基于成本的优化器(Cost Based Optimizer,CBO)
对各种可能的情况进行量化比较,从而可以得到花费最小的情况。
-
RBO 优化规则
- 列裁剪
- 谓词下推
- 传递闭包:一些比较操作符,如<、>等,具有传递性,可以起到化简表达式的作用
- Runtime Filter(min-max filter,in-list filter,bloom filter)
- Join 消除
- 谓词合并
查询优化器的社区开源实践
Apache Calcite
- One size fits all:统一的SQL查询引l擎模块化,插件化,稳定可靠
- 支持异构数据模型
- 关系型
- 半结构化
- 流式 地理空间数据
- 内置RBO和CBO
三、引用参考&推荐书目
- 《SQL进阶教程》
- 《数据库查询优化器的艺术:原理解析与SQL性能优化》
- 《SQL优化核心思想》
- juejin.cn/post/709069…