私はここ数週間、幾分単純なクエリのパフォーマンスを向上させています。私は最初に質問を書いて、次に現在使われているものと私の考えを記述することにします。幾分単純なクエリのパフォーマンスの問題
表:約100万行
統計集まっ週刊
例:
SELECT c1,c2,c3,c4,TO_NUMBER(c5)
FROM TABLE
WHERE CODE = 3 AND
NUMBER IN (115,433,54542,435930,22565,3293029,3222) AND
DATE BETWEEN TO_DATE('01-01-2010','DD-MM-YYYY') AND TO_DATE('01-01-2015','DD-MM-YYYY') AND
AMOUNT > 1000
現在使用されているCODE、NUMBER、およびDATEのカラムにインデックスがあるが、クエリ完了までに数分かかる。テストされたNUMBER列のインデックスもありますが、パフォーマンスはやや向上しますが、クエリはまだ遅すぎます。
また、テーブルは月ごとにDATEで分割されます。
既存のインデックスが機能していないため、今では独自のテーブルを作成して、私が支配しています。
私の考えは次のとおりです。
1)CODEでパーティションまたはマテリアライズド・ビューを作成します。テーブルの半分はcode = 3なので、私の考えは、これが事実上テーブルの大きさの半分になるということです。
2)DATEは実際には時間とともに保存されます。この方法ですべての日付を切り捨ててパーティションを作成すると、パフォーマンスが向上する可能性があります。
3)4つの列すべてにインデックスを作成して、パフォーマンスが向上するかどうかを確認します。
これはすべて私が実際に持っているものです。他の提案は非常に高く評価されています!
DATEの範囲によるパーティション分割。 – Alfabravo
説明計画の出力を表示してください。 – OldProgrammer