DB2 物化查询表

----start

    DB2 物化查询表MQT(MATERIALIZED QUERY TABLES)存储了一个查询的结果,当我们查询相关表时,DB2会自动决定是使用原表还是使用物化查询表。当数据库中有海量数据时,使用物化查询表可以极大的提高查询速度。但是,有一利就有一弊,维护物化查询表也是相当耗时的。所以,物化查询表广泛应用在数据仓库和海量数量的报表查询中,这类查询的特点是:数据量大、经常需要分组统计、数据不会频繁变更。正因为这些特点,在这些场合中物化查询表可以充分发挥它的优势。

 

定义了物化查询表后,如果我们执行以下SQL,DB2优化器将使用MQT

DB2 优化器将上面的SQL转化成下面这样

 

    在定义物化查询表时,我们可以指定在原始表数据改变时,是立即刷新物化查询表(REFRESH IMMEDIATE)呢,还是延迟刷新(REFRESH DEFERRED );我们还可以指定,在适当的时候,允许优化器使用物化查询表(ENABLE QUREY OPTIMIZATION)呢,还是禁止使用(DISABLE QUREY OPTIMIZATION]);我们还可以指定,物化查询表是由系统维护(MAINTAINED BY SYSTEM)呢,还是由用户维护(MAINTAINED BY USER)。

    如果我们将物化查询表定义为延迟刷新(REFRESH DEFERRED ),那么在使用物化查询表之前,我们必须使用REFRESH TABLE 语句刷新它。如果定义为由用户负责维护物化查询表时,用户可以对物化查询表进行insert update delete 等操作,此时,物化查询表将不能REFRESH了。

    维护物化查询表是相当耗时的,为了提高维护效率,我们可以给延迟刷新(REFRESH DEFERRED)的物化查询表定义一个staging 表。staging 表用来对物化查询表执行增量刷新,当刷新完成时,staging 表就会被删除。对于上面定义的物化查询表,我们可以定义如下staging 表

 

    PROPAGATE IMMEDIATE 子句表示,原始表做出的任何更改,都将被累积在 staging 表中。GLOBALTRANSID表示每个被传播的行对应的全局事务 ID)。 GLOBALTRANSTIME表示事务的时间戳。taging 表创建后,处于检查暂挂状态,我们可以使用 SET INTEGRITY 语句将表设置为正常状态,这时候,我们就可以使用staging 表来刷新物化查询表了。

 

更多细节请参考DB2信息中心。

 

----更多参见:DB2 SQL 精萃

----声明:转载请注明出处。

----last updated on 2010.1.21

----written by ShangBo on 2010.1.21

----end

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值