全面解析IBM DB2 9中的查询优化新特性
2008-08-30 16:25:53 来源:WEB开发网核心提示: 域值a) 现在看看包含以下数据的两个表的连接 T1.C1 = T2.C1,其中一组数据包含另一组数据:T1.C112345678910T2.C112345678910谓词的选择性定义如下:Selectivity = 1 / ( max ( C1 colcard , C2 colcard )
域值
a) 现在看看包含以下数据的两个表的连接 T1.C1 = T2.C1,其中一组数据包含另一组数据:
T1.C1
1
2
3
4
5
6
7
8
9
10
T2.C1
1
2
3
4
5
6
7
8
9
10
谓词的选择性定义如下:
Selectivity = 1 / ( max ( C1 colcard , C2 colcard ) ) = 0.1
基数为 10 * 10 * 0.1 = 10。
b) 如果表连接 T1.C1 = T2.C1 中的数据在两组数据相交处稍微有所不同,一个表中的数据没有包含另一个表中的数据:
T1.C1
1
2
3
4
5
6
7
8
9
10
T2.C1
1
2
2
2
2
5
12
13
14
15
在这种情况下,T1.C1 的值,例如 7,不能与 T2.C1 连接,而 T2.C1 的值,例如 12,也不能与 T1.C1 连接,但是估计算法并不知道这一点,因而会做出不准确的假设,认为 T1 中的一个值很可能与 T2 中的任意值连接,反之亦然。
基数仍然是 10 * 10 * 0.1 = 10。
所以成本是一样的,但是 a) 的实际行输出结果为 10,b) 的实际行输出结果为 6。
结果
1
2
2
2
2
5
显然,这里存在不一致性,而且,对于更复杂的连接,这种错误估计的问题很可能变得更糟糕。而 V8 FP9 以上版本提供的 DB2 统计视图特性,正是为弥补这一类由于数据分布和值导致的不一致性而设计的。
为了理解统计视图的作用,我们来考虑一个更实际一点的连接场景:
T1.C1 T1.C2
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
10 J
T2.C1
1
2
2
2
2
5
5
13
14
15
更多精彩
赞助商链接