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