SQL Optimizer 解析 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第1天
大数据的计算模式主要分为批量计算(batch computing)、流式计算(stream computing)、交互计算(interactive computing)、图计算(graph computing)等。其中,流式计算和批量计算是两种主要的大数据计算模式,分别适用于不同的大数据应用场景。
流式计算:对数据流进行处理,是实时计算。
批量计算:统一收集数据,存储到数据库中,然后对数据进行批量处理的数据计算方式。 流式计算与批式计算区别:
- 数据时效性不同:流式计算实时、低延迟, 批量计算非实时、高延迟。
- 数据特征不同:流式计算的数据一般是动态的、没有边界的,而批处理的数据一般则是静态数据。
- 应用场景不同:流式计算应用在实时场景,时效性要求比较高的场景,如实时推荐、业务监控…批量计算一般说批处理,应用在实时性要求不高、离线计算的场景下,数据分析、离线报表等。
- 运行方式不同,流式计算的任务持续进行的,批量计算的任务则一次性完成。 目前主流的流式计算框架有Storm、Spark Streaming、Flink三种。
SQL的演变
graph TD
SQL--Parser--> AST
AST--Analyzer--> Logical_plan;
Logical_plan--Optimizer--> Physical_plan
AST:抽象语法树结构
Logical_plan:逻辑计划树
Physical_plan:物理执行计划
常见的查询优化器
- Top-dowm Optimizer
- Bottom-up Optimizer
- RBO:Rule-based Optimizer
- CBO:Cost-based Optimizer
RBO优化规则:
SELECT pv.siteId,user.name
FROM pv JOIN user
ON pv.siteId = user.siteId AND pv.userid = user.id
WHERE user.siteId > 123
- 列裁剪
- 谓词下推
- 传递闭包
- Runtime Filter
CBO:
- 统计信息
- 统计信息的收集方式
- 在DDL里指定需要收集的统计信息,数据库会在数据写入时收集或者更新统计信息
CREATE TABLE REGION(
R_REGIONKEY INT NOT NULL,
R_NAME CHAR(25) NOT NULL,
R_COMMENT VARCHAR(152)
)DUPLICATE KEY(R_REGIONKEY)
DISTRIBUTED BY HASH(R_REGIONKEY) BUCKETS 1
PROPERTIES("stats_columns"="R_NAME");
- 手动执行explain analyze statement,触发数据库收集或者更新统计信息
ANALYZE TABLE table_name COMPUTE STATISTICS FOR COLUMNS column-name1,column-name2,....
- 动态采样
SELECT count(*)FROM table_name
- 执行计划枚举 通常使用贪心算法或者动态规划选出最优的执行计划