haitao:
不过where rownum不是直接在子查询里加以限制,感觉会失去对IO开销的降低
[阅读: 650] 2005-11-08 16:08:04
我的猜测是,数据库系统每生成一个结果集,其实都是附有rownumber字段的
只是以前的数据库系统设计者比较短见,故意把它隐藏不公开
因此,即使用了where rownumber()>1M and rownumner()<1M+1K,其实内部还是先生成了整个记录集(>1M条记录),然后返回1K条,省掉的只是返回的传输量--本来是全部返回,再由调用者取1K条
不过,如果做到好,如有索引帮助,可以直接算出第1M条的记录依赖的数据块,直接生成第1M条开始的1K条记录。这样的效率才是最好的