DB优化小常识 - 执行计划中Cardinality的计算

DB中如果我们使用CBO作为优化器,一条SQl语句就会有多种执行路径,那么CBO会计算各个执行路径的访问代价,选择代价最小的作为我们的执行计划。CBO在做访问路径估算的时候有一个很重要的参数作为我们计算Cost的因数,这个就是我们通常所说的扫描字段的集的势(Cardinality) 。

一般公式如下:

Cardinality=MAX(Cardinality Factor * Rowcount,1)

1) . 索引字段: 对于这个字段的查询条件是"="的情况下,我们的Cardinality Factor的计算公式就如下:
Cardinality Factor = 1 / 字段上的唯一值的数量

2). 索引字段的查询条件是"" "<=" ">=" 那么我们计算Cardinality Factor的公式就为
Cardinality Factor = (1 / 字段上的唯一值的数量) + (1 / 记录数)

3). 索引字段的查询条件是in,那么我们的公式就为:
Cardinality Factor = in条件中的变量数 / 字段上的唯一值的数量

4). 索引字段的查询条件是"<>",那么我们的公式就为:
Cardinality Factor = ( 1 - (1 / 字段上的唯一值的数量 ) )

5). 查询条件为not in的时候,Cardinality的结果是根据not in中变量作为阶乘得出的公式为:
Cardinality Factor = ( 1 - (1 / 字段上的唯一值的数量 ) ) ^ (not in 变量数)

非索引字段
1). 当查询条件为"="或者是"in"的时候,非索引字段的Cardinality Factor的计算公式为:
Cardinality Factor = 1 / 100

2). 当查询条件为"","<=",">=","<>","not in",非索引字段的Cardinality Factor的计算公式为:
Cardinality Factor = 1 / 20

3). 非索引多字段
公式: Cardinality Factor = 字段1的Cardinality Factor * 字段2的Cardinality Factor * ... * 字段n的Cardinality Factor

4). 全表扫描
Cardinality Factor=1;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-743631/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-743631/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值