ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

数据库查询执行引擎核心原理:从关系代数到物理执行

数据库查询执行引擎核心原理:从关系代数到物理执行 一.查询执行1.查询执行的基本流程SQL语句 ↓ 解析 Parser ↓ 生成逻辑计划 ↓ 生成物理执行计划 ↓ 执行算子 ↓ 返回结果2.关系代数与执行计划数据库会把SQL转换成关系代数操作例如Scan扫描Filter / Selection过滤Projection投影Join连接Aggregate聚合Sort排序Limit限制结果数3.物理执行计划通常表示为一个树Projection ↓ Filter ↓ SeqScan数据由叶子节点向上流动SeqScan产生元组 ↓ Filter筛选元组 ↓ Projection裁剪列 ↓ 返回结果二.执行1.流水线执行一行数据可以立即流过整个管道不需要先把扫描结果保存下来Scan读取第1行 ↓ Filter判断 ↓ Projection提取列 ↓ 输出第1行生产者和消费者子算子生产元组 父算子消费元组2.拉取式执行父算子主动向子算子要数据父 → 子给我下一条 子 → 父返回一条3.推送式执行子算子主动把数据推给父算子子 → 父这是下一批数据4.向量化执行向量化执行一次处理一批元组而不是一条优点减少函数调用次数更好利用CPU缓存便于SIMD向量指令批量过滤和表达式计算更高效。三.对算子的几种处理1.扫描算子1顺序扫描2索引扫描3选择性选择性表示满足谓词的记录比例选择性 满足条件的行数 / 总行数2.过滤算子只有满足条件的元组才会传给父算子3.投影算子选择需要的列计算表达式重命名列去除不需要的数据。例如SELECT name, age 1 AS next_age FROM users;4.limit算子四.物化与流水线的适用场景附
返回列表