ACTIONS
約 1,100 万行のテーブルがあります。列の 1 つは、ACTION_DATE
このことがいつ発生したかを示しています。昨日の行動を日報化したいけど、たまには昔のレポートも出したい。この表には、約 3 年前のデータが含まれています。
列の分布ACTION_DATE
は非常に偏っています。1 日に 50,000 件を超えるアクションが発生する場合もあれば、数百件に過ぎない場合もあります。RUNSTATS
このテーブルで を行ったところ、頻度リストが過去数年のエントリですぐにいっぱいになり、db2 がそのテーブルにアクセスするコストを誤って計算し、不適切な実行計画につながります。
Statistical Views について読んだことがありますが、これが問題の解決に役立つかもしれないと考えました。だから私はこのようなものを作りました:
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
その日のクエリのアクセス プランを説明すると、情報が取得され、それに応じてコストが調整されることがわかります。
統計ビューの何が問題になっていますか?