【数据库】优化器(optimizer)

 

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.)

 

posted @ 2016-01-12 10:50  付小同  阅读(526)  评论(0编辑  收藏  举报