0

次のようなrownum関数を使用せずに、Oracleデータベースのテーブルから更新された最後の20行を取得したい

select * 
  from EMP 
 order by last_Updated 
 where rownum < 20

このクエリには時間がかかります。

4

2 に答える 2

3

あなたが投稿したクエリは、あなたが思っていることをしません。このクエリは、任意の20行をフェッチしてから、列順に並べ替えlast_updatedます。最新の20行が必要な場合ORDER BY last_updatedは、ネストされたクエリで実行してからrownum、外部クエリで述語を適用する必要があります。

SELECT *
  FROM (SELECT *
          FROM emp
         ORDER BY last_updated desc)
 WHERE rownum <= 20

それが索引付けされていると仮定するとlast_updated、それは非常に効率的なクエリになるはずです。last_updatedインデックスに対して最小/最大スキャンを実行してcount stopkeyから、最初の20行のみをフェッチするように実行できるはずです。このクエリのパフォーマンスに問題がある場合、どのような種類のクエリプランを取得していますか?

于 2013-02-05T15:31:39.420 に答える
1

代わりにRownum()を使用してみて、update_date descで並べ替えてください。rownum()<= 20 .. ..

于 2013-02-05T15:30:06.687 に答える