首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

分页查询,什么样的SQL查询速度最快解决思路

2012-01-12 
分页查询,什么样的SQL查询速度最快table表中有唯一主键DUNO;现为实现分页查询方式,有两个sql待选:1.SELECT

分页查询,什么样的SQL查询速度最快
table   表中有唯一主键   DUNO;
现为实现分页查询方式,有两个sql待选:
1.
SELECT   TOP   100   *
FROM   tab
WHERE   DUNO> (SELECT     max(A.DUNO)
FROM   (select   top   10000   *   from   tab   where   DUNO < '2 '   order   by   DUNO)   A
)
ORDER   BY   DUNO
2.
SELECT   *
FROM   tab
WHERE   DUNO> (SELECT     MAX(A.DUNO)
FROM   (select   top   10000   *   from   tab   where   DUNO < '2 '   order   by   DUNO)   A
)
AND   DUNO <(SELECT     MAX(A.DUNO)
FROM   (select   top   10101   *   from   tab   where   DUNO < '2 '   order   by   DUNO)   A
)


请问哪一种查询速度最快?
若考虑移植性问题,应如何实现?
是否有其它更高效的方式?

[解决办法]
http://community.csdn.net/Expert/topic/4986/4986911.xml?temp=.9076959


有你想要的
[解决办法]
CREATE PROC SP_FY
(
@PageCount INT,--第N页
@PageSize INT--每页行数
)
AS
DECLARE @sql NVARCHAR(4000),--查询字符串
@PC INT, --PAGE COUNT
@APC INT, --ALL PAGE COUNT
@P1 INT,--P1是游标的id
@RowCount INT

SELECT @sql= '查询语句 '
print @sql
EXEC SP_CURSOROPEN @P1 OUTPUT,@sql,@scrollopt=1,@ccopt=1,@RowCount=@RowCount OUTPUT
SELECT @PC=@PageCount,@APC =CEILING(1.0*@RowCount/@PageSize)
SELECT @PageCount=(@PageCount-1)*@PageSize+1
EXEC SP_CURSORFETCH @P1,16,@PageCount,@PageSize
EXEC SP_CURSORCLOSE @P1
SELECT @RowCount AS 'ROWCOUNT ',@APC AS 'ALLPAGECOUNT ',@PC AS 'PAGECOUNT '

GO


现在流行这个
[解决办法]
http://blog.csdn.net/dutguoyi/archive/2006/01/10/575617.aspx
讲了很多种方法,都很有特色,可以看看.

如果就你的题目,还是前面那种效率高点.
[解决办法]
SP_CURSOROPEN的使用方法,在帮助中找不到, 在baidu找了一下,有相关的英文说明,不错,又学到了一些未知的东西。
[解决办法]
sql 2005 有新增的 (更简单)

排名函数为分区中的每一行返回一个排名值。根据所用的函数,某些行可能与其他行接收到相同的值。排名函数具有不确定性。

Transact-SQL 提供下列排名函数:

RANK
NTILE

DENSE_RANK
ROW_NUMBER

用 ROW_NUMBER 可以 很容易 分页


USE AdventureWorks;
GO
WITH OrderedOrders AS
(SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (order by OrderDate)as RowNumber
FROM Sales.SalesOrderHeader )
SELECT *
FROM OrderedOrders
WHERE RowNumber between 50 and 60;


[解决办法]
楼上的不错,mark下

热点排行