1

SELECT instmax,
r
FROM
(SELECT instmax,
rownum r
FROM
(SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST
)
WHERE rownum <= 10
)
WHERE r >=6;

出力

代替テキスト

SELECT instmax,
r
FROM
(SELECT instmax,
rownum r
FROM
( SELECT instmax FROM pswlinstmax ORDER BY instmax DESC NULLS LAST
)
)
WHERE r 6 ~ 10;

出力

代替テキスト

両方のクエリでパフォーマンスが確実に向上していますか?これについて明確にしていただけますか?

4

2 に答える 2

1

Oracleは、エイリアスを含む条件をROWNUMインラインビューにプッシュすることはできません。

これは、2番目のクエリがフィルタリングをオンrnにした完全なテーブル(またはインデックス)スキャンを使用し、最初のクエリが使用することを意味します(STOPKEYエイリアスを使用しないためROWNUM < 10

あなたはこの記事を読みたいと思うかもしれません:

于 2010-08-27T08:59:20.937 に答える
0

これはおそらく、STOPKEY 最適化が機能しなくなったためです。

「rownum < xx」は、特別な最適化を行う非常に特殊な (トップ N クエリと呼ばれる) ものです。between 句はそれをトリガーしなくなりました。

実行計画を比較して「STOPKEY」を探す必要があります。それが含まれている場合、それは最適化された Top-N クエリです。

以下も参照してください。

http://blog.fatalmind.com/2010/07/30/analytic-top-n-queries/

于 2010-08-27T08:48:21.663 に答える