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 条评论
2014-07-28 17:10