全面解析IBM DB2 9中的查询优化新特性
2008-08-30 16:25:53 来源:WEB开发网create table tab1 (i int, b char(30))
create table tab2 (i int, b char(150))
create table mqt1 (cnt,val) as
(select count(*), tab2.b from tab2, tab1 where tab1.b=tab2.b group by tab2.b)
data initially deferred refresh immediate
create index i11 on tab1 (i asc, b asc
create index i12 on tab1 (b asc, i asc)
create index i21 on tab2 (i asc, b asc
create index i22 on tab2 (b asc, i asc
insert into tab2 values(14,substr(char(current timestamp),1,5)
在这个场景中,经过分析,可以确定使用索引 I11 来访问表 TAB1 是最优的,但是优化器的默认行为不会这么做,即使在调优之后也仍然不会这样做。但是,可以通过创建下面的指南来影响优化器,使之考虑 I11 索引,从而将 MQT mqt1 的刷新速度提高两倍以上。
统计视
基本上,关系数据库中的数据会因事务和批量更新而发生变化 —— 即使是数据集市或数据仓库中的内容也会随着时间而变化。SQL 工作负载常常是动态的 SQL(而不是静态的),所以任何基于成本的优化器通常都必须对数据、数据选择性和数据基数做出假设,但是很多情况下,数据的分布呈难以预测的不均匀性,数据域值本身的特性以及表和视图的相互依赖关系会使优化器很易出错。
由于查询是动态的,在编译时并不知道其选择标准,因此,即使有了关于数据的完整的分布统计,仍然可能生成错误的计划。如果优化器能预知查询结果(或部分查询结果),那么该信息对于帮助确定更精确的访问计划将非常有用。
基本上,可以有以下两点假设:
◆均匀分布
◆域值
为了理解统计视图,我们首先看看以上两点假设,通常情况下这两点假设可能是错误的。因此,在进行查询计划优化时,就需要使用统计视图。
更多精彩
赞助商链接