1. select top @pagesize * from table1 where id not in (select top @pagesize*(@page-1) id from table1 order by id) order by id
2. select * from (select top @pagesize * from (select top @pagesize*@page * from table1 order by id) a order by id desc) b order by id
哪种方法更好?试了一下.
做两个table,各有1万条记录,一个table的id有index,一个没有
图1,没有index的table,取第1000-1100条记录
图2,没有index的table,取第9000-9100条记录
图3,有index,取第1000-1100条记录
图4,有index,取第9000-9100条记录
可以发现sort的字段建立了index的条件下,第1个方法快很多,特别是查到后面页数的时候.原因就在于第2个方法中,第一次做了select 后,再做自查询时,index已经没有了.sort就会非常影响性能了.
2. select * from (select top @pagesize * from (select top @pagesize*@page * from table1 order by id) a order by id desc) b order by id
哪种方法更好?试了一下.
做两个table,各有1万条记录,一个table的id有index,一个没有
图1,没有index的table,取第1000-1100条记录
图2,没有index的table,取第9000-9100条记录
图3,有index,取第1000-1100条记录
图4,有index,取第9000-9100条记录
可以发现sort的字段建立了index的条件下,第1个方法快很多,特别是查到后面页数的时候.原因就在于第2个方法中,第一次做了select 后,再做自查询时,index已经没有了.sort就会非常影响性能了.
本文对比两种SQL分页查询方法的性能,通过实验证明在已建立索引的情况下,第一种方法在查询较后页数时更为高效。关键在于第二次查询时索引的有效性对性能的影响。
476

被折叠的 条评论
为什么被折叠?



