请说明原因,只说结果的不给分,帮忙顶的给分。Use Northwind--1.
Declare @lastid int
Select top 30 @lastid = orderid from Orders order by orderid
Select top 10 * from Orders where orderid > @lastid order by orderid
--2.
select top 10 * from (select top 40 * from Orders order by orderid asc) as a order by orderid descSelect 出第31-40条记录

解决方案 »

  1.   

    select top 10 * from (select top 40 * from Orders order by orderid asc) as a order by orderid desc--两次不同规则的排序,必然效率低
      

  2.   

    还见过一种这种形式的:SELECT TOP 10 ... WHERE ... NOT IN (SELECT TOP 30 ... ORDER BY ...) ORDER BY ...
      

  3.   

    分页方案一:(利用Not In和SELECT TOP分页) 
    语句形式: 
    SELECT TOP 10 * 
    FROM TestTable 
    WHERE (ID NOT IN 
    (SELECT TOP 20 id 
    FROM TestTable 
    ORDER BY id)) 
    ORDER BY ID 
    SELECT TOP 页大小 * 
    FROM TestTable 
    WHERE (ID NOT IN 
    (SELECT TOP 页大小*页数 id 
    FROM 表 
    ORDER BY id)) 
    ORDER BY ID ------------------------------------- 分页方案二:(利用ID大于多少和SELECT TOP分页) 
    语句形式: 
    SELECT TOP 10 * 
    FROM TestTable 
    WHERE (ID > 
    (SELECT MAX(id) 
    FROM (SELECT TOP 20 id 
    FROM TestTable 
    ORDER BY id) AS T)) 
    ORDER BY ID 
    SELECT TOP 页大小 * 
    FROM TestTable 
    WHERE (ID > 
    (SELECT MAX(id) 
    FROM (SELECT TOP 页大小*页数 id 
    FROM 表 
    ORDER BY id) AS T)) 
    ORDER BY ID 
    ------------------------------------- 分页方案三:(利用SQL的游标存储过程分页) 
    create procedure XiaoZhengGe 
    @sqlstr nvarchar(4000), --查询字符串 
    @currentpage int, --第N页 
    @pagesize int --每页行数 
    as 
    set nocount on 
    declare @P1 int, --P1是游标的id 
    @rowcount int 
    exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output 
    select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页 
    set @currentpage=(@currentpage-1)*@pagesize+1 
    exec sp_cursorfetch @P1,16,@currentpage,@pagesize 
    exec sp_cursorclose @P1 
    set nocount off 其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。 
    建议优化的时候,加上主键和索引,查询效率会提高。 通过SQL 查询分析器,显示比较:我的结论是: 
    分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 
    分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 
    分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用 
      

  4.   

    第2种
    sql server好像对top语句有优化,同时第一种中还用了">"会遍历整张表.
      

  5.   

    那是设计问题
    ---------------------
    end
      

  6.   

    yes,as u said,the second statement is better.It did not need declare a variable and have integrality,but it all can ignore.In a circle or performance testing the first one must have less achievement.