0

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

その日のクエリのアクセス プランを説明すると、情報が取得され、それに応じてコストが調整されることがわかります。

統計ビューの何が問題になっていますか?

4

0 に答える 0