db2 - 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
我在声明中遗漏了什么?是否有其他方法可以在更新时允许对物化查询表进行读取访问?
解决方案
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
它)
推荐阅读
- java - 在 KStream 和 KTables 上同时操作
- java - Java - 通过读取 CSV 文件将记录插入 SQL 表
- hash - 什么是一些很长的哈希函数映射到一个小整数
- flutter - Dart:如何使用点符号,未捕获的 TypeError 问题
- python - 为什么它不从列表中删除所有零
- c++ - main.cpp:(.text+0x1d): undefined reference to `MainWindow::init()' collect2: error: ld returned 1 exit status
- reactjs - 用 http => https 反应 localhost 问题
- vb.net - 两个列表(字符串),当我向其中一个添加值时,它被添加到另一个
- python - pandas 中的 data.describe() 方法如何区分总体数据和样本数据?
- python-3.x - 项目拒绝使用弹出功能、切片和删除删除,我该如何解决这个问题?