3

私のアプリケーションは、汎用的 (フィルターなし) にする必要があり、分析関数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 の一意のエントリごとにパーティションが作成されるため、遅いのでしょうか? それを回避する他の方法はありますか?これをより速くする方法について何か提案はありますか?

4

1 に答える 1