sql server 中的分页查询
在网上查了sql server的分页查询,看到许多的人都写了sql server中的分页查询的四种方法的比较,从简易程度,以及执行速度上,我只想写出我自己经过查阅别人的博客,我的可以进行分页查询的语句,经过了几个过程,记录一下。
1、开始
SELECT TOP pageSize news.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY PUBTIME DESC) AS RowNumber,* FROM NEWS ) news WHERE RowNumber > pageSize*(pageIndex-1) AND news.STATUS = 1 AND news.CLASSID = 1 ORDER BY PUBTIME DESC
这种分页查询能够查出数据,但是不是我想要的查询数据,因为我的查询条件是应该有的 也就是 CLASSID = '1' 或者是CLASSID = '0' 的数据才是我想要的,我苦苦不知道把WHERE 条件放在哪里,甚至我放在了OVER()中,我也是醉了。
2、修改
SELECT TOP pageSize news.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY PUBTIME DESC) AS RowNumber,* FROM NEWS WHERE CLASSID = '1') news WHERE RowNumber > 10*(pageIndex-1) AND news.STATUS = 1 AND news.CLASSID = 1 ORDER BY PUBTIME DESC
这个红色的部分其实是可以增加条件限制的,也只有在这里加条件限制才会起决定性的作用,后面的条件限制其实是在前面的基础上执行的,其实这个sql 语句还是可以进行优化的。
3、优化
SELECT TOP pageSize news.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY PUBTIME DESC) AS RowNumber,* FROM NEWS WHERE CLASSID = '1' AND news.STATUS = 1 ) news WHERE RowNumber BETWEEN 10*(pageIndex-1) AND 10*pageIndex
这两个部分其实,第一个就是使sql 语句看着比较简洁,没有实际的意义,第二个部分其实就直接查询你所要的当前页的数据就OK了,没有必要把当前页以及后面的页中的数据都查询出来,这个执行起来会比上面的那个要好一些!

浙公网安备 33010602011771号