wudi

博客园 首页 新随笔 联系 订阅 管理
老话题了,主要是看下测试数据,不同数量级的效率是不一样的,具体差别很大滴!!,看许多人都说是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千万级别

第一种:

第二种:

第三种:

 

posted on 2010-09-13 15:21  菜鸟吴迪  阅读(266)  评论(0编辑  收藏  举报