这是我参与「第四届青训营 」笔记创作活动的的第1天.
一分钟总结本结课程
SQL查询Optimizer, 即SQL优化器.由于SQL语言是声明性语言,其距离机器实现之间差距很大,具体机器怎么实现则要通过Optimizer对SQL语言进行解析,找到最优的机器实现算法. Optimizer 分为基于规则(Rule-based,RBO,就是人们根据经验来看,先筛选数据还是先读入哪些数据,设计一套规则),和基于成本(cost-based,CBO, 让损失函数最小的处理顺序,设置损失函数还有数据统计是里面重要内容). 目前主流Optimizer 很多都是RBO和CBO两种功能都有,最后取最优. 未来发展DATA+AI, 实现Optimizer更好的性能.
大数据体系
01、大数据体系和SQL
SQL 处理流程
Parser
String -> AST (abstract syntax tree)
词法分析:拆分字符串,得到关键词、数值常量、字符串常量、运算符号等token
语法分析:将 token 组成 AST node, 最终得到一个AST。
实现:递归下降(ClickHouse),Flex 和Bison(PostgreSQL), JavaCC(Flink), Antlr(Presto, Spark)
Analyzer and Logical Plan
查询优化
1、SQL是一种声明式语言,用户只描述做什么没有告诉数据库怎么做 2、目标:找到一个正确且执行代价最小的物理执行计划 3、查询优化器是数据库的大脑,最复杂的模块,很多相关问题都是NP的 4、一般SQL越复杂,Join的表越多,数据量越大,查询优化的意义就越大,因为不同执行方式的性能差别可能有成百上千倍
Physical Plan and Executor
小结
02、常见的查询优化器
查询优化器分类
RBO
RBO 关系代数
RBO-优化规则
RBO - 列裁剪
RBO - 谓词下推
RBO - 传递闭包
RBO - Runtime Filter
将过滤出的第一个表的siteld 最大和最小之间的作为范围 用于过滤第二个表(缺点在于稀疏情况)
或 in-list意思是将第一个表滤出的数作为字典对第二个表进行搜索(缺点在于数多的时候)
小结
CBO - 概念
CBO-统计信息
自动执行可能会影响实时导入速率
手动执行,避免了实时更新影响速率,但有可能忘记手动导致没更新
动态采样 ,抽样估计总量
CBO-统计信息推到规则
选择率:使用筛选条件之后,筛选剩下的东西的占比
倒数第二行错了 应为
literal>max:0