博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DB2 物化查询表
阅读量:4050 次
发布时间:2019-05-25

本文共 1970 字,大约阅读时间需要 6 分钟。

----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信息中心。

 

----更多参见:

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

----last updated on 2010.1.21

----written by ShangBo on 2010.1.21

----end

 

你可能感兴趣的文章
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>