我在db2 9.7(还没有fixpack 1)中创建了一个用户维护的mqt(物化查询表)。这是主事实表的简单分组。但我的问题并没有被重写以达到目的。
我试过的是:
使用enable query optimization创建mqt,并由用户特性维护
还包括refresh deferred和data initially deferred。(也许我不该这么做?)
设置注册表变量,告诉DB2使用所有类型的MQT进行优化
ran“设置tablex的完整性所有立即取消选中”
运行runstats
刷新缓存:刷新包缓存动态
确保默认查询优化类至少位于级别2(位于5)
将默认刷新时间设置为0(我认为这与用户定义的mqt无关)
然后尝试确定优化器是否将使用MQT:
尝试了各种我希望使用mqt的简单查询-或者:
从事实表中选择count(*)
或者选择组维度,从事实表中按组维度计数(*)。
explain(使用db2expln)只引用事实表,而不是MQT
查询结果显示计数与事实表一致,而不是MQT表
查询持续时间与事实表一致,而不是MQT表。
关于判断查询是否使用mqt的更简单的方法,或者我接下来应该尝试什么让它使用它,有什么建议吗?

最佳答案

两件事:
1)寄存器设置为什么?它默认为数据库配置参数是什么,默认值是“system”,所以优化器将忽略您的mqt。
2)另外,您关于CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION和由用户mqts维护的假设是错误的。DFT_MTTB_TYPES仍然适用——对于用户维护的mqt,DFT_REFRESH_AGE寄存器必须设置为any才能考虑刷新延迟mqt。

关于sql - 为什么DB2不使用我的MQT表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1853847/

10-11 01:47