SQL高性能分页
分页的场景就不多说了,无处不在。
方法一:利用row_number()
with C as ( select ROW_NUMBER() over(order by orderdate,orderid) as rownum,orderid,orderdate,custid,empid from Sales.Orders ) select rownum,orderid,orderdate,custid,empid from C where rownum between 10 and 20 order by rownum
如果有索引支持row_number()的计算,SQL server不需要扫描表中的所有的行,只需要扫面前20行,然后进行筛选。
方法二:2012以后的新特性,利用offset/fetch进行筛选。
select orderid,orderdate,custid,empid from Sales.Orders order by orderdate,orderid offset 10 rows fetch next 10 rows only