sql分页问题,老话题!!

老话题了,主要是看下测试数据,不同数量级的效率是不一样的,具体差别很大滴!!,看许多人都说是row number效率最低,但是本人测试结果有点出入。10万级别的基本没啥差距,百万级别的差距不是太明显,但是not in变慢,千万级别的差距就很明显了,not in明显跟不上了。总体比较而言,还是max(id)效率最高,但是不通用。row number比较通用。
PS:上亿的就别玩了,还是分表吧!!
方法1:
适用于 SQL Server 2000/2005
SELECT   TOP  页大小  *
FROM  table1
WHERE  id  NOT   IN
          (
          
SELECT   TOP  页大小 * ( - 1 ) id  FROM  table1  ORDER   BY  id
          )
ORDER   BY  id

方法2:
适用于 SQL Server 2000/2005
SELECT   TOP  页大小  *
FROM  table1
WHERE  id  >
          (
          
SELECT   ISNULL ( MAX (id), 0
          FROM  
                (
               
SELECT   TOP  页大小 * ( - 1 ) id  FROM  table1  ORDER   BY  id
                ) 
A
          )
ORDER   BY  id

方法3:
适用于 SQL Server 2005

SELECT   TOP  页大小  *  
FROM  
        (
        
SELECT  ROW_NUMBER()  OVER  ( ORDER   BY  id)  AS  RowNumber, *   FROM  table1
        ) A
WHERE  RowNumber  >  页大小 * (页数 - 1 )

每页20条记录,取第10000条以后的

表结构:id(int)  name(varchar) insertTime(datetime)

测试数据:10万级别的数据

 

 

 

三种方式几乎没有区别。

 

2百万级别

第一种方法:

第二种方法:

第三种方法:

 

3千万级别

第一种:

第二种:

第三种:

 

你可能感兴趣的:(sql)