扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
TABLENAME | COLNAME | COLCARD | HIGH2KEY | LOW2KEY | TABLENAME | COLNAME | COLCARD | HIGH2KEY | LOW2KEY |
T1 | C1 | 100 | 99 | 2 | T2 | C1 | 100 | 99 | 2 |
T1 | C2 | 10 | 1999 | 1900 | T2 | C2 | 10 | 1999 | 1900 |
T1 | C3 | 5 | 'Y' | 'B' | T2 | C3 | 5 | 'Y' | 'B' |
所有的谓词被看作是中立的,这是由于两个表的 stats 是相等的。因此,在 V8 FixPak 14 和 DB2 9 中,应该在任一个表(不要求两个表)的列(C1、C2 和 C3)中收集列组统计信息,这样,优化器就可以检测这些连接谓词的统计相关性。
示例 B.7
使用和示例 B.6 相同的谓词,假设表具有如下统计信息:
表 B.7 确定父表TABLENAME | COLNAME | COLCARD | HIGH2KEY | LOW2KEY | TABLENAME | COLNAME | COLCARD | HIGH2KEY | LOW2KEY |
T1 | C1 | 100 | 99 | 2 | T2 | C1 | 10 | 99 | 2 |
T1 | C2 | 10 | 1999 | 1900 | T2 | C2 | 10 | 1999 | 1900 |
T1 | C3 | 5 | 'Y' | 'B' | T2 | C3 | 5 | 'Y' | 'B' |
在这个场景中,谓词 P2 和 P3 看作是中立的,这是由于两个表的列 C2 和 C3 的统计信息是等同的。然而,C1 的统计信息显示 T1 是 P1 的父表,这是因为 T1.C1 的 COLCARD 比 T2.C1 的 COLCARD 大,并且两个列具有等同的 HIGH2KEY 和 LOW2KEYare 统计信息。因此,应该在 T1 的列(C1、C2 和 C3)中收集列组统计信息,这样,优化器就可以检测连接谓词间的统计相关性。
示例 B.8
使用和示例 B.6 相同的谓词,假设表具有下列统计信息:
表 B.8 统计信息
TABLENAME | COLNAME | COLCARD | HIGH2KEY | LOW2KEY | TABLENAME | COLNAME | COLCARD | HIGH2KEY | LOW2KEY |
T1 | C1 | 100 | 99 | 2 | T2 | C1 | 10 | 999 | 2 |
T1 | C2 | 10 | 1999 | 1900 | T2 | C2 | 10 | 1999 | 1900 |
T1 | C3 | 5 | 'Y' | 'B' | T2 | C3 | 5 | 'Y' | 'B' |
在这个场景中,谓词 P2 和 P3 被表示为中立的,这是由于两个表的 C2 和 C3 列的统计信息是等同的。然而,C1 的统计信息表明 T1 和 T2 都不是父表,它也不是中立的,因为 T1.C1 具有一个更高的 COLCARD 统计信息,而 T2.C1 具有一个更高的统计信息。因此,应该在 T1 或 T2 的列(C2 和 C3)中收集列组统计信息,这样优化器就可以检测连接谓词 P2 和 P3 之间的统计相关性。
示例 B.9 使用 DPF 和范围统计信息
考虑 T1 和 T2 这两个表的连接,它们在多个数据库分区上被分区,并且是并置的,统计信息是在相同的节点手机的,分区键在列(C1 和 C2)上,使用如下谓词进行连接:
P1: T1.C1 = T2.C1 P2: T1.C2 = T2.C2 P3: T1.C3 = T2.C3 |
假设这两个表具有如下统计信息:
表 B.9TABLENAME | COLNAME | COLCARD | HIGH2KEY | LOW2KEY | TABLENAME | COLNAME | COLCARD | HIGH2KEY | LOW2KEY |
T1 | C1 | 100 | 99 | 2 | T2 | C1 | 10 | 999 | 2 |
T1 | C2 | 10 | 1999 | 1900 | T2 | C2 | 10 | 1999 | 1900 |
T1 | C3 | 5 | 'Y' | 'B' | T2 | C3 | 5 | 'Y' | 'B' |
这个连接限定 DPF 条件,所以优化器可以使用范围统计信息来标识父表。在这个场景中,谓词 P2 和 P3 被表示为中立,这是由于两个表的 C2 和 C3 列的统计信息是等同的。然而,C1 的统计信息表明 T1 和 T2 都不是父表,也不把它看作是中立的,这是因为 T1.C1 具有一个更高的 COLCARD,而 T2.C1 具有一个更高的 HIGH2KEY 统计信息。因此,应该在 T1 或 T2 的列(C2 和 C3)上收集列组统计信息,这样优化器就可以检测连接谓词 P2 和 P3 间的统计相关性。
示例 B.10 无法使用 DPF 和范围统计信息
假设与 B.9 相同的场景,但是 T1 的分区键是在列(C1 和 C2)中,T2 的分区键在列(C2 和 C1)中。这个连接不满足第一个 DPF 条件,因为这两个表被认为不是在相同的列分区的;连接谓词 T1.C1=T2.C1 在 T1 的分区键中引用了第一个列,但在 T2 分区键中引用了第二个列。因此,优化器不能使用范围统计信息来标识父表,而只能使用 COLCARD 统计信息来确定父表。只在 COLCARD 的基础上,连接被认为是中立的。
示例 B.10.1 无法使用 DPF 和范围统计信息
假设与 B.10 相同的场景,但具有下列统计信息:
表 B.10TABLENAME | COLNAME | COLCARD | HIGH2KEY | LOW2KEY | TABLENAME | COLNAME | COLCARD | HIGH2KEY | LOW2KEY |
T1 | C1 | 100 | 99 | 2 | T2 | C1 | 98 | 999 | 2 |
T1 | C2 | 10 | 1999 | 1900 | T2 | C2 | 11 | 1999 | 1900 |
T1 | C3 | 5 | 'Y' | 'B' | T2 | C3 | 5 | 'Y' | 'B' |
在 COLCARD 统计信息基础上,T1 是谓词 P1 的父表,而 T2 是谓词 P2 的父表。由于 COLCARD 统计信息被关闭,因此多列统计信息的偏差将降至 1% 以内,这是优化器在 DPF 环境中的容错值。在这里它可以使用简单方法,并且应在两个表的所有三个列中收集列组统计信息。之后,如果优化器没有计算出一个不同的基数估计值,那么说明并未达到 1% 的偏差。
多列统计信息(索引和列组)只提供了一组列中不同组数量的信息。因此,说明统计相关性时,优化器假设数据是一致分布的。然而,本地等式谓词的选择性估计值则使用分布统计信息(如果可用)来计算,从而说明数据中的偏差。由于假设数据是一致的,而实际上数据是有偏差的,为避免高估本地等式谓词的组合选择性估计值,FixPak 10 中将对优化器的统计相关性检测做进一步改善。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者