次のようなrownum関数を使用せずに、Oracleデータベースのテーブルから更新された最後の20行を取得したい
select *
from EMP
order by last_Updated
where rownum < 20
このクエリには時間がかかります。
あなたが投稿したクエリは、あなたが思っていることをしません。このクエリは、任意の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行のみをフェッチするように実行できるはずです。このクエリのパフォーマンスに問題がある場合、どのような種類のクエリプランを取得していますか?
代わりにRownum()を使用してみて、update_date descで並べ替えてください。rownum()<= 20 .. ..