ページ分割されたクエリと 11G でのストップキーの最適化に関して奇妙な状況に遭遇しました (完全な 11G と XE インストールで再現できました)。(id、url、ページ) を列として、id 列にインデックスを付けたテスト データベースに、Alexa の上位 1M サイトを使用しています。次のクエリ:
SELECT * FROM (
SELECT raw_sql_.*, rownum raw_rnum_
FROM (select id, url, page from alexa_data order by id asc) raw_sql_
)
WHERE raw_rnum_ between 800001 and 800010;
次の実行計画を生成します。
このSQL中:
SELECT * FROM (
SELECT raw_sql_.*, rownum raw_rnum_
FROM (select id, url, page from alexa_data order by id asc) raw_sql_
)
WHERE raw_rnum_ >= 800001 and rownum <= 10;
STOPKEY 最適化を使用して実行計画を生成しました。
両者の唯一の違いはWHERE raw_rnum_ between 800001 and 800010;
vsWHERE raw_rnum_ >= 800001 and rownum <= 10
です。
私が見る限り、これらのクエリはまったく同じように動作します。最初のクエリでストップキーの最適化が欠落している理由を知っている人はいますか?