0

私が言うなら:

select * from table order by col1 where rownum < 100

テーブルに 1,000 万件のレコードがある場合、Oracle は 1,000 万件すべてを取得し、並べ替えてから最初の 10 件を表示しますか? または、それを最適化する方法はありますか?

4

1 に答える 1

3

こうすれば

select * from table order by col1 where rownum < 100

この場合、WHERE 句が ORDER BY の前にあるため、Oracle はエラーをスローします。

こうすれば

select * from table where rownum < 100 order by col1 

WHERE 句が ORDER BY の前にあるため、Oracle はランダムな 99 レコードを返します。

最初の 100 件のレコードを列で並べ替えて返す場合は、サブセレクトで順序を指定する必要があります。

select * 
  from ( select * from table order by col1 )
 where rownum <= 100

オラクルはソートを行いますが、他にどのようにして必要なレコードを知ることができますか? ただし、ROWNUMのため、ストップキーでのソートになります。内部で最適化が行われるため、 Oracle は実際には結果セット全体をソートしませんが、これは想定できることです。

Tom Kyte によるこの記事を参照してください。

于 2013-07-04T19:44:51.150 に答える