共同进步
作者共同进步·2013-11-27 10:46
数据库架构师·中国金融电子化公司

MQT的定义使用案例

字数 1693阅读 770评论 1赞 0

1)        创建user维护的MQT,过程如下:

db2 “create table t_sub(i_cola int not null,i_colb int not null,f_amt dec(18,2))”

db2 “create table t_sum(i_cola,i_colb,f_amt) as (select i_cola,i_colb,sum(f_amt) from t_sub group by i_cola,i_colb) data initially

deferred refresh deferred enable query optimization maintained by user”

db2 “select * from t_sum”

I_COLA      I_COLB      F_AMT

----------- ----------- ---------------------------------

SQL0668N  由于表 "DB2ADMIN.T_SUM" 上的原因码为 "1"所以不允许操作。

SQLSTATE=57016

db2 set integrity for t_sum all immediate unchecked

db2 select * from t_sum

I_COLA      I_COLB      F_AMT

----------- ----------- ---------------------------------

 

  0 条记录已选择。

2)        使上述创建的MQT在基表访问过程中可用,几点注意事项

1.       在最高的隔离级别下创建MQT,这样才可以在较低的隔离级别下使用

db2 terminate

db2 change isolation to rr

db2 connect to dbname

创建MQT

2.       按照如下方式更新以下DB配置参数

db2 update db cfg using DFT_REFRESH_AGE any DFT_MTTB_TYPES all

3.如果以上设置全部正确的话仍然可用,则通过db2exfmt查看执行计划可以了解到MQT不可用的原因。

3)        可以临时解除MQT与引用表的依赖关系,将MQT变为常规表,此过程不会丢失数据

1.alter table mqt_name drop marterialized query;

4)        可以恢复MQT与引用表的依赖关系,将常规表恢复为MQT,此过程不会丢失数据

1.alter table mqt_name add marterialized query (materialized-query-definition);

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论1 条评论

zhendazhenda数据库管理员昆仑银行
2014-07-28 17:10
"最高的隔离级别下创建MQT,这样才可以在较低的隔离级别下使用" 为什么要在最高隔离级别创建MQT呢
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广