Access Path Selection
主要是System R的那篇文章的一个笔记。
数据库的基本流程
- 解析SQL,生成语法树
- 根据关系代数重写,包括谓词下推等。(逻辑计划)
- 生成物理计划
- 执行物理计划
这一篇主要讲的就是利用Cost模型来最优化物理计划。
一些基本概念
- predicate,中文叫谓词,但其实就是 一个 逻辑语句?比如
t.a < 1
这种 - Cost_total = Cost_io + W * Cost_cpu :这是一个整体的公式,主要的Cost还是在IO方面。后文基本就是在具体的讨论如何计算 Cost_io的大小。通常CPU的cost比起IO小的太多了,所以加了一个权重W。
- Selective Factor: 这个东西就是给定了谓词,之后的概率估算。其实可以写成这个样子
F(Pred)
是一个给定了Pred就确定了的值。F(a=1)就是a == 1在当前这个表里的概率。 - Statistics:顾名思义就是统计量呗。比如某个键的最大最小值,以及表里的Tuple数。(跑题一下:之前看ClickHouse的语法里有一个Sample,我是一直没理解数据库要采样做啥。知道看到这里,我才明白优化器在做优化时直接使用采样的结果,避免全局扫描,减少计算量。)
单表Cost
Cost_IO = Sel(Pred) * Statistics
多表Cost
Join
N 路Join就可以转为多次2路join