用 DB2 说明工具深入理解物化查询表(MQT)刷新机制
2010-05-13 00:00:00 来源:WEB开发网在清单 11 中我们得到了一个与清单 7 完全不同却与清单 3 十分类似的访问方案。清单 3 中的 MQT 采用即时刷新方式,对基表 insert 操作时同时向 MQT mqttab 进行了操作,而在清单 11 中的 MQT 采用的是延迟刷新方式,在访问方案中唯一的差别是其没有同时更新 MQT,而是同时对登台表进行了操作。
接下来我们来看对基表的 update 和 delete 操作时的访问方案,使用的命令如清单 12 所示。
清单 12. 基表的 update 和 delete 操作
db2 set current explain mode explain
db2 "update basetab2 set c2=100 where c1=11"
db2exfmt -d MYDB -1 -e -o update2.exfmt
db2 "delete from basetab2 where c1=11"
db2exfmt -d MYDB -1 -e -o delete2.exfmt
db2 set current explain mode no
同样的我们可以发现,对基表的 update 和 delete 操作时的访问方案也没有对 MQT 的刷新操作,而是对登台表进行了相应的操作。读者可以在本文最后的下载链接中找到 update3.exfmt 和 delete3.exfmt 中的访问方案,限于篇幅不在正文部分显示。
最后,我们来看一下当用户手动的刷新 MQT 时其执行方案,使用的命令和访问方案如清单 13 所示。
清单 13. 手动刷新采用延迟更新方式并有登台表的 MQT
db2 "insert into basetab3 values(12,12,12,12)"
db2 "insert into basetab3 values(13,12,12,12)"
db2 "insert into basetab3 values(14,12,12,12)"
db2 "insert into basetab3 values(15,12,12,12)"
db2 "update basetab3 set c2=100 where c1=11"
db2 runstats on table hqy.basetab3
db2 set current explain mode explain
db2 "refresh table mqttab3"
db2exfmt -d MYDB -1 -e -o refresh3.exfmt
db2 set current explain mode no
Rows
RETURN
( 1)
Cost
I/O
|
0.333333
FILTER
( 2)
514.308
61.0015
+------------+------+-------------------+
1 0 8.02174e-07
TBSCAN FILTER INSERT
( 3) ( 4) ( 6)
0.0048 0.076 514.124
0 0 61.0015
| | /----+-----\
1 1 8.02174e-07 1000
TABFNC: SYSIBM TBSCAN FILTER TABLE: HQY
GENROW ( 5) ( 7) MQTTAB3
0.0048 506.044 Q6
0 60.0015
| |
1 0.000501359
TABFNC: SYSIBM DELETE
GENROW ( 8)
506.044
60.0015
/----+-----\
0.000501359 1000
UPDATE TABLE: HQY
( 9) MQTTAB3
506.04 Q7
60.001
/----+-----\
0.000501359 1000
FETCH TABLE: HQY
( 10) MQTTAB3
506.036 Q8
60.0005
/----+-----\
0.000501359 1000
TBSCAN TABLE: HQY
( 11) MQTTAB3
505.995
60
|
0.000501359
TEMP
( 12)
504.729
60
|
0.000501359
>^NLJOIN
( 13)
504.271
60
/----+-----\
0.000501359 40
FILTER TBSCAN
( 14) ( 20)
491.357 144.813
59 7
| |
0.000501359 1000
FILTER TABLE: HQY
( 15) MQTTAB3
491.168 Q19
59
|
58
TBSCAN
( 16)
487.826
59
|
58
SORT
( 17)
487.184
59
|
58
DELETE
( 18)
482.288
59
/---+----\
58 58
TBSCAN TABLE: HQY
( 19) MQTTAB3_STG
13.6476 Q9
1
|
58
TABLE: HQY
MQTTAB3_STG
Q10
在清单 13 中我们看到了一个非常复杂的访问方案,限于篇幅不能详细的解释,简要的说,在这个访问方案中,首先读取了登台表 mqttab3_stg 并删除了登台表的数据(DELETE 操作符 18),接着用登台表中读取的数据与 MQT mqttab3 进行合并(NLJOIN 操作符 13)并放入临时表中(TEMP 操作符 12),然后根据临时表中的数据对 MQT mqttab3 依次进行了更新(UPDATE 操作符 9)、删除(DELETE 操作符 8)和插入(INSERT 操作符 6)。在整个过程中没有任何用到基表 basetab3 的操作,这就说明此时的刷新是完全基于登台表 mqttab3_stg 进行的延迟刷新。
至此,我们已经通过访问方案理解了 MQT 的即时刷新方式、延迟刷新方式以及有登台表的延迟刷新方式的特点和机制,读者还可以继续深入探讨其他情景,如定义复杂的 MQT(如使用 COUNT 和 GROUP BY),或者使用 LOAD 装载数据等情景的各种刷新方式。
总结
在文中介绍了 MQT的刷新方式并利用说明工具获取其访问方案,使读者能够较为深入的理解这些刷新方式,从而能够在实际应用中选择合适的刷新方式,更大程度的提高应用系统的性能。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
- ››DB2 pureScale 实战
更多精彩
赞助商链接