[quote]那样嵌套,是为了把真正要查询的内容分离,这只是个示例可能不用嵌套,但复杂了的时候,嵌套的效果就出来了[/quote]
其实除了排序以外,其他大部分情况都可以通过优化语句结构直接加在里面的。
反过来说,如果排序,分页实际上对性能没有任何提高,只是展示多少而已。
[quote]select * from (select ROW_NUMBER() OVER(order by erin_id) rn,t.* from te_resource_info t)
where rn between 5 and 20;[/quote]
这种方式确实在性能上是最差的,甚至不如问题中第二种方式。
其实说白了,分页在性能上的意义在于查询记录数的减少,而真正能将次数进行减少了才会提升性能。问题中第二种方式是将全部结果都查询出来再过滤。而用分析函数的方式不仅将全部记录都查询出来,还要进行排序,自然是最慢的。应该使用第一种方式,但是需要考虑风险:
1.如果是服务器端翻页,越向后翻页速度越慢。当然,即便翻到最后一页,也只相当于第二种情况而已。
2.如果优化方式使用了FIRST_ROWS的话,可能造成执行计划的变化,造成翻到后面的页会有较大性能的降低,甚至不如第二种。
3.如果语句中有排序,事实上用哪种方式都一样。基本上别指望提高性能了。应该尽可能避免这种情况。