我有一个SQL查询,看起来像这样:
SELECT * FROM(
SELECT
...,
row_number() OVER(ORDER BY ID) rn
FROM
...
) WHERE rn between :start and :end
Run Code Online (Sandbox Code Playgroud)
从本质上讲,正是ORDER BY部分减慢了速度.如果我要删除它,EXPLAIN成本会下降一个数量级(超过1000倍).我试过这个:
SELECT
...
FROM
...
WHERE
rownum between :start and :end
Run Code Online (Sandbox Code Playgroud)
但这并没有给出正确的结果.有没有简单的方法来加快速度?或者我是否需要花更多时间使用EXPLAIN工具?
Oracle决定从10g版本中删除基于规则的优化器,将基于成本的优化器作为唯一选择.
我认为基于规则的优化器具有始终可预测的无价值的积极方面.我已经看到Oracle 10g改变了执行计划,从而导致了类似乌龟的表演.
这可能是这种变化背后的理由?