老话题了,主要是看下测试数据,不同数量级的效率是不一样的,具体差别很大滴!!,看许多人都说是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万级别的数据

 

sql分页问题,老话题!! 

 

三种方式几乎没有区别。

 

2百万级别

第一种方法:

sql分页问题,老话题!!

第二种方法:

sql分页问题,老话题!!

第三种方法:

 

sql分页问题,老话题!!

3千万级别

第一种:

sql分页问题,老话题!!

第二种:

sql分页问题,老话题!!

第三种:

 sql分页问题,老话题!!

相关文章:

  • 2021-11-25
  • 2022-02-01
  • 2022-12-23
  • 2022-12-23
  • 2021-10-18
  • 2022-12-23
  • 2021-05-30
  • 2022-03-03
猜你喜欢
  • 2021-10-25
  • 2022-12-23
  • 2021-11-27
  • 2022-12-23
  • 2022-12-23
  • 2021-12-28
  • 2022-01-03
相关资源
相似解决方案