全面解析IBM DB2 9中的查询优化新特性
2008-08-30 16:25:53 来源:WEB开发网在这种情况下,连接谓词 T1.C1=T2.C1 和 T1.C2='A'(或 C2 的任何值)返回的基数估计将为 1。但是,如果本地谓词为 T1.C2='B' 或 T1.C2='E',那么这个估计就错得太厉害了。请看上面两个表在 T1.C1 = T2.C1 上的连接所产生的如下结果。
T1.C1 T1.C2 T2.C1
1 A 1
2 B 2
2 B 2
2 B 2
2 B 2
5 E 5
5 E 5
为了弥补这种估计错误,可以创建和准备一个统计视图,并像下面这样加以利用:
Create view SCHEMA.V1 as select * from T1, T2 where T1.C1 = T2.C1
Alter view SCHEMA.V1 enable query optimization
Runstats on table SCHEMA.V1 with distribution
对于统计视图,ENABLE QUERY OPTIMIZATION 子句将导致该视图以及与之相关联的统计信息被用于改进查询优化。这里只需收集包含分布特征的数据 runstats 信息。runstats 信息是统计视图部署的关键,必须提供比基本表更完整的信息。有时候,列组或类似的统计选项会很有用。
现在,统计视图将包含在整个结果集上收集到的关于连接之后的数据分布的统计信息,无论是在 non-DPF 还是 DPF 环境中,这个信息都是完整的,没有推断成分。有时候,runstats 可能要花更多的时间,这可能是由于视图本身的规划没做好。在运行 runstats 之后,以下附加信息会成为已知的信息:
结果的列的 COLCARD
结果的基数
值以及值的计数
然后,这些信息被包括进来,用于帮助优化器在为那些符合条件的查询(这些查询不需要直接引用视图)的选择性估计和基数估计计算成本时做决定。 这将导致更精确的成本计算和更优的访问计划。
下面使用以上讨论的相同的示例数据,阐释在使用和不使用查询的统计视图的情况下基数估计的差别。
更多精彩
赞助商链接