分页查询,什么样的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下