首页 > 解决方案 > DB2 系列物化视图刷新

问题描述

我创建了以下具体化查询表:

CREATE TABLE SCHEMA.TABLE AS
  (SELECT * FROM SCHEMA.TABLEEXAMPLE)
     DATA INITIALLY DEFERRED
     REFRESH DEFERRED
     MAINTAINED BY USER
     DISABLE QUERY OPTIMIZATION;

当我执行REFRESH TABLE SCHEMA.TABLE它时,它会被锁定以供其他用户读取。

从 IBM https://www.ibm.com/support/knowledgecenter/en/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000977.html阅读此文档

我试图执行这个语句:

REFRESH TABLE SCHEMA.TABLE ALLOW READ ACCESS

但我收到以下错误:SQL State: 42601 Unexpected keyword ALLOW

我在声明中遗漏了什么?是否有其他方法可以在更新时允许对物化查询表进行读取访问?

标签: db2db2-400

解决方案


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它)


推荐阅读