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

本文详细介绍了在使用CBO成本基优化器时如何计算SQL执行路径的成本,特别是通过不同查询条件下的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/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值