【数据库】优化器(optimizer)
发布时间:2024-09-09
?optimizeristhecoreofaDBengine!?实际运行计划(physicalplan)=访问方式(accessmethod)+join算法+执行顺序?1.accessmethod1)indexscan2)filescan?2.joinalgorithm1)nested-loop2)

?

optimizer is the core of a DB engine!

?

实际运行计划(physical plan) = 访问方式 ( access method) + join算法 + 执行顺序

?

1.access method

1) index scan

2) file scan

?

2.join algorithm

1) nested-loop

2) hash

3) sort-merge

?

3.执行顺序

一个复杂query由一些简单的query(single block)嵌套而成,

如:
select a from T1 where T1.b>(select T2.b from T2 where T2.b=1)

可以被分解为两个简单query:

1)select a from T1 where T1.b>()

2)select T2.b from T2 where T2.b=1

对于每个query,根据一些相等公式,如

产生不同的执行顺序。

?

一个query如:select * from A,B,C

有多少种计划:

access method:2^3=8

join:3^2=9

order:3!=6

总共:8*9*6=432

这样,一个query有不同的执行计划,如何选择最好的呢?

常见方法:

?

1.costed-base

计算(估算)计划中每一步的IO cost, 输出的tuple数。

?

2. rule-base

根据一些经验,query的特点,执行特定的顺序。如: if sql1 是 A型, 使用 plan1

?

3.random

从众多plan中随机选择,估算其cost。

?

(oracle数据库的RBO和CBO就是指 rule-based optimization 和 cost-based optimization.)

?

平台注册入口