我创建了以下物化查询表:
CREATE TABLE SCHEMA.TABLE AS
(SELECT * FROM SCHEMA.TABLEEXAMPLE)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
MAINTAINED BY USER
DISABLE QUERY OPTIMIZATION;
当我执行REFRESH TABLE SCHEMA.TABLE
时,它会被锁定,以供其他用户读取。
我试图执行以下语句:
REFRESH TABLE SCHEMA.TABLE ALLOW READ ACCESS
但是出现以下错误:SQL State: 42601 Unexpected keyword ALLOW
我在声明中缺少什么?有其他方法可以允许在对实体化查询表进行良性更新时对其进行读取访问吗?
答案 0 :(得分:0)
Db2 for IBM i上的MQT落后于Db2 for LUW中可用的功能。
我从不打扰他们,相反,带有计算列的编码矢量索引(EVI)可以满足我所考虑的所有需求。 (请注意,Db2 LUW没有EVI)
根据毛的评论,您可以尝试使用以下方法删除重新创建的MQT:
CREATE TABLE SCHEMA.TABLE AS
(SELECT * FROM SCHEMA.TABLEEXAMPLE)
DATA INITIALLY DEFERRED
REFRESH DEFERRED
MAINTAINED BY USER
DISABLE QUERY OPTIMIZATION
with NC;
但是我认为刷新仍然需要对MQT的独占访问权。
我想到的唯一选项是在使用MQT时“刷新”
以编程方式使用基表上的触发器或使用SQL一次更新几行的进程。
删除DISABLE QUERY OPTIMIZATION
,并且不直接访问MQT。而是在适当时依靠优化器进行访问。现在,您可以每隔几个小时创建一个版本,并且Db应该开始使用较新的版本进行新查询。一旦不再使用较旧的版本,请将其删除(或REFRESH
)