0

我有一张桌子,我们称之为它ACTIONS,它有大约 1100 万行。其中一列 ,ACTION_DATE说明了这件事发生的时间。我想生成一份关于昨天采取的行动的每日报告,但有时我想生成一份很久以前的报告。该表包含大约 3 年前的数据。

列上的分布ACTION_DATE非常倾斜。有时一天会有超过 50k 的动作,而其他日子只有几百个。我RUNSTATS在这张表上做了一个,它很快用过去几年的条目填充它的频率列表,这导致 db2 错误地计算了访问该表的成本并导致执行计划错误。

我已阅读有关统计视图的信息,并认为这可能有助于解决问题。所以我做了一个这样的:

create view actions_recent as (select * from actions where action_date between current date - 90 days and current date);
alter view actions_recent enable query optimization
runstats on table actions_recent with distribution default num_freqvalues 90

但它似乎对成本估算或查询计划没有影响。

另一方面,如果我手动将特定日期的基数插入SYSSTAT表中:

update sysstat.coldist set colvalue='2013-08-15',valcount=48562 where tabname='ACTIONS' and colname='ACTION_DATE' and seqno=1

并解释当天查询的访问计划,我看到它会获取信息并相应地调整成本。

我的统计视图有什么问题?

4

0 回答 0