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了,没有必要把当前页以及后面的页中的数据都查询出来,这个执行起来会比上面的那个要好一些!

posted @ 2017-12-07 17:07  ssc在路上  阅读(382)  评论(0)    收藏  举报