select * from
(
  select * , ROW_NUMBER() OVER(ORDER BY id) px from tb
) t
where px between m and m+nselect top n * from
(
  select * , ROW_NUMBER() OVER(ORDER BY id) px from tb
) t
where px>m

解决方案 »

  1.   

    看執行計劃
    set showplan_text on
      

  2.   

    你大数据量测试一下!索引不同!
    表碎片不一样  都会有影响的! SQL是基于成本的选执行计划
      

  3.   

    看看 SET STATISTICS IO 
    和 SET STATISTICS TIME
      

  4.   

    我用200万条记录的表测试,  看 IO 和 TIME  。  select * from
    (
      select * , ROW_NUMBER() OVER(ORDER BY id) px from tb
    ) t
    where px between m and m+n更快
      

  5.   

    差不多吧,如果数据很多的话,这两个查询语句都会花一定的时间,查询时尽量不要用select * ,能查个别字段最好!
      

  6.   

    USE AdventureWorks;
    GOSET STATISTICS TIME ON
    select * from 

    select * , ROW_NUMBER() OVER(ORDER BY SalesOrderDetailID) px 
    from  Sales.SalesOrderDetail
    ) t 
    where px between 2 and 2+5select TOP 6 * from 

    select * , ROW_NUMBER() OVER(ORDER BY SalesOrderDetailID) px 
    from  Sales.SalesOrderDetail
    ) t 
    where px > 2SET STATISTICS TIME OFF(6 行受影响)SQL Server 执行时间:
       CPU 时间 = 344 毫秒,占用时间 = 50 毫秒。(6 行受影响)SQL Server 执行时间:
       CPU 时间 = 391 毫秒,占用时间 = 53 毫秒。
      

  7.   

    USE AdventureWorks;
    GOSET STATISTICS TIME ON
    select * from 

    select * , ROW_NUMBER() OVER(ORDER BY SalesOrderDetailID) px 
    from  Sales.SalesOrderDetail
    ) t 
    where px between 10 and 110select TOP 101 * from 

    select * , ROW_NUMBER() OVER(ORDER BY SalesOrderDetailID) px 
    from  Sales.SalesOrderDetail
    ) t 
    where px > 10SET STATISTICS TIME OFF
    USE AdventureWorks;
    GOSET STATISTICS TIME ON
    select * from 

    select * , ROW_NUMBER() OVER(ORDER BY SalesOrderDetailID) px 
    from  Sales.SalesOrderDetail
    ) t 
    where px between 10 and 110select TOP 101 * from 

    select * , ROW_NUMBER() OVER(ORDER BY SalesOrderDetailID) px 
    from  Sales.SalesOrderDetail
    ) t 
    where px > 10SET STATISTICS TIME OFF
      

  8.   


    (101 行受影响)SQL Server 执行时间:
       CPU 时间 = 283 毫秒,占用时间 = 49 毫秒。(101 行受影响)SQL Server 执行时间:
       CPU 时间 = 373 毫秒,占用时间 = 322 毫秒。