我有一张桌子,我们叫它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
并解释当天查询的访问计划,我看到它会收集信息并相应地调整成本。
我的统计观点出了什么问题?