【发布时间】:2012-11-27 20:17:36
【问题描述】:
可能重复:
Does Oracle fetch all the rows before evaluating rownum?
如果我在一个有 100k 行的表上运行以下查询
select * from
(
select rownum rownumber, fname, lastname
from customers
) where rownumber between 1 and 100;
Oracle 是提取所有 100k 行然后过滤提取的行列表以获得前 100 行,还是有一种巧妙的方法过滤到前 100 行而不提取所有 100k 行?
在上面的例子中,有没有办法找出 Oracle 实际是如何进行 fetch 的?
【问题讨论】:
-
执行计划很可能会告诉你。
-
如果 Oracle 不对此进行优化并获取 100k 行,我希望我的钱回来。
-
@user964970,我非常怀疑是否有人曾亲自为 Oracle 许可证付费:-)。
-
对于那些投票结束的人,我不相信这是重复的。在“重复”线程中,有一个显式的
rownum = 1谓词,优化器可以使用它在第一行之后停止处理。在这种情况下,没有显式的rownum谓词,因此不会调用停止键优化。
标签: sql oracle oracle10g oracle11g rownum