私は数百万のレコードを持つファクトテーブルを持っています。この表は、日付列にレンジ・パーティション化されています。私は、パーティション・プルーニングが起こる参照日付をハードコーディングすることによって、このクエリを実行するとOracleパーティションのプルーニングが発生しない
FACT_AUM (ACCOUNT_ID VARCHAR2(30),MARKET_VALUE NUMBER(20,6), POSTING_DATE DATE);
は、私は別の一時テーブル
ACCOUNT_TMP (ACCOUNT_ID VARCHAR2(30), POSTING_DATE DATE);
を持っていると私は実行したときの結果はすぐに戻っ
SELECT A.ACCOUNT_ID, SUM(A.MARKET_VALUE) FROM
FACT_AUM A JOIN ACCOUNT_TMP B ON A.ACCOUNT_ID = B.ACCOUNT_ID
AND A.POSTING_DATE=TO_DATE('30-DEC-2016',DD-MON-YYYY') GROUP BY
A.ACCOUNT_ID;
来ます次は、パーティションのプルーニングが表示されず、クエリが回転し続けます。
SELECT A.ACCOUNT_ID, SUM(A.MARKET_VALUE) FROM
FACT_AUM A JOIN ACCOUNT_TMP B ON A.ACCOUNT_ID = B.ACCOUNT_ID
AND A.POSTING_DATE = B.POSTING_DATE GROUP BY
A.ACCOUNT_ID;
これについての洞察は役に立ちます。
このフォーラムでDDLを共有できるかどうかわかりません。要約版を入手してDDLに関連する部分を投稿できるかどうかを確認します。 – sk411
これらの2つのクエリの実行計画は、さらに調査する方が良いでしょう。 – JSapkota
両方のクエリの実行計画を確認しました。ハードコードされた日付を持つものはフィルタ述語にposting_dateを持ち、partition_start&partition_stopには特定のパーティションIDがあります。しかし、結合演算との一方が(表146のパーティションを有するもの) – sk411