【数据库】优化器(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.)

 

转载于:https://www.cnblogs.com/fuxiaotong/p/5123598.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值