扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
COLNAME | COLCARD | HIGH2KEY | LOW2KEY |
DEPTNUMB | 8 | 66 | 15 |
MANAGER | 8 | 270 | 30 |
DEPT | 8 | 66 | 15 |
ID | 35 | 340 | 20 |
3. 计算基数估计值。
等式连接谓词的过滤因子的估计值计算如下:
1/max(colcard_LHS,colcard_RHS). |
其中 LHS 在连接谓词的左边,RHS 在连接谓词的右边。本例中有以下两个连接谓词:
P1: org.manager=staff.id P2: org.deptnumb=staff.dept |
以及过滤因子(ff),P1 和 P2 计算如下:
ff(P1) = 1 / max (8,35) = 1/35 = 0.0285714 ff(P2) = 1/max(8,8) = 1/8 = 0.125 |
使用过滤因子以及两个表的基数估计值,连接基数计算如下:
JoinCard = Cardinality(ORG) * cardinality(STAFF) * ff(P1) * ff(P2) = 35 * 8 * 0.0285714 * 0.125 = 1 |
4. 在连接中标识父表。
在表 B.5 中,列统计信息显示 STAFF 是连接的父表,因为符合以下条件:
对于谓词 org.manager=staff.id:
colcard(MANAGER) < colcard(ID) high2key(MANAGER) < high2key(ID) low2key(MANAGER) > low2key(ID) |
因此,这个谓词的父表是 STAFF。
对于谓词 org.deptnumb=staff.dept,colcard、high2key 和 low2key 统计信息是等同的。因此,这个谓词不存在父表,它应被视为“中立”。
5. 在父表中收集列组统计信息。
在步骤 4 中,STAFF 被标识为连接的父表,ORG 被标识为连接的子表,所以应在 STAFF 表的列(ID,DEPT)中收集列组统计信息:
RUNSTATS ON TABLE <SCHEMA_NAME>.STAFF ON ALL COLUMNS AND COLUMNS ((ID,DEPT)); |
使用这两个列的列组统计信息,DB2 优化器就可以准确地估计出基数:
8 TBSCAN ( 2) 33.5658 2 | 8 SORT ( 3) 33.4243 2 | 8 HSJOIN ( 4) 33.0363 2 /-----+-----\ 35 8 TBSCAN TBSCAN ( 5) ( 6) 17.2334 15.3736 1 1 | | 35 8 TABLE: SKAPOOR TABLE: SKAPOOR STAFF ORG |
示例 B.6 中立连接
考虑 T1 和 T2 这两个表的连接,使用以下谓词:
P1: T1.C1 = T2.C1 P2: T1.C2 = T2.C2 P3: T1.C3 = T2.C3 |
假设这两个表具有以下的统计信息:
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者