ORDER BY
問合せの最初のいくつかの行が必要な場合は、コストベースであるFIRST_ROWS(n)
ヒントを使用することをお薦めします。
FIRST_ROWS(n)
ヒントは、最初の(n)行をできるだけ短時間で受け取る必要がある場合に使用します。たとえば、次のPL/SQLブロックでは、カーソルを使用して問合せの最初の10ヒットを取り出し、FIRST_ROWS(n)
ヒントを使用して応答時間が短縮されるように最適化しています。
declare cursor c is select /*+ FIRST_ROWS(10) */ article_id from articles_tab where contains(article, 'Omophagia')>0 order by pub_date desc; begin
for i in c loop insert into t_s values(i.pk, i.col); exit when c%rowcount > 11; end loop;
end; /
カーソルc
はomophagiaというワードを含むソートされたROWIDを戻すSELECT
文です。コードがカーソル内をループして、最初の10行を取り出します。取り出された行は、一時表t_s
に格納されます。
FIRST_ROWS(n)
ヒントを指定した場合、オプティマイザは上位n個のヒットを戻すコストが低い場合に、テキスト索引に対してROWIDをスコア順で戻すように指示します。
このヒントがない場合、テキスト索引によりCONTAINS
述語を満たすすべての行がソートされていない順序で戻された後、Oracle DatabaseによりROWIDがソートされます。このように結果セット全体を取り出すと時間がかかります。
この問合せでは、最初の10ヒットのみが必要なため、ヒントを使用することでパフォーマンスが向上します。