私のアプリケーションは、汎用的 (フィルターなし) にする必要があり、分析関数RANK
とを含むビューを使用しますDENSE_RANK
。たとえば、私はビューを持っていますMYVIEW
:
SELECT
RANK() OVER (PARTITION BY FIELD1 ORDER BY FIELD2) RANK,
FIELD2,
FIELD3
FROM TABLE1;
私のアプリケーションは、実行時に必要なフィルターを適用します。
SELECT * FROM MYVIEW WHERE FIELD3 IN ('a','b','c');
私のクエリはRANK関数なしでは非常に高速ですが、RANK関数を使用すると非常に遅くなります(2分以上)(正しい結果が得られますが、遅いだけです)。基になるテーブルには 250,000 行以上あり、そのデザインを制御することはできません。これ以上分割できません。ビューが呼び出されるたびに、FIELD1 の一意のエントリごとにパーティションが作成されるため、遅いのでしょうか? それを回避する他の方法はありますか?これをより速くする方法について何か提案はありますか?