每次 传当前页 和 取的条数
据说 用top和ordery 很慢 有好的方法吗

解决方案 »

  1.   

    mssql一般都用rownumber了,分页的开销其实都是在排序上,有合适的索引就会快很多
      

  2.   

    就是用存储过程分的 但是不是也得拼SQL吗 求实例
      

  3.   

    http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html
    这个应该对你有用
      

  4.   

    [MSSQL]NTILE另类分页有么有?!
    http://www.cnblogs.com/kkun/archive/2011/08/15/2139713.html
      

  5.   

    用max分页方法,效率非常高。
      

  6.   

            string sql = string.Format("select * from (SELECT row_number () over(order   by P.id)  rowNum,P.id,F.eyerect,P.personName,F.id as id1,F.personid,F.facerect,L.id as id2,R.id as id3,R.labId,R.perId,F.faceNumber,P.fthreshold,F.image,L.name FROM person AS P  INNER JOIN perlab AS R  ON  P.id=R.perId  INNER JOIN label AS L ON R.labId=L.id INNER JOIN face AS F ON P.id=F.personid AND P.id=R.perId  )temp where rowNum>({0}-1)*{1} and rowNum<={0}*{1}", page, count);
            var dt = dac.ExecuteDataSet(sql);
            return dt.Tables[0];
      

  7.   

    Select *from
    (
      Select *,row_number() over(order by id asc)   as "No"
      from T_Users ) as T_1
    )
    where T_1.No>@startRowIndex and T_1.No<= @startRowIndex+@maximumRows
      

  8.   

    传参是起始id(startRowIndex) + 条数(maximumRows)!
      

  9.   

    如果你用到了聚合索引,你就不会嫌order慢了
    网上很多
    针对语句建立合适的键/索引
      

  10.   


    ROW_Number()分页吧,
    比较简单也比较高效
      

  11.   

    新问题 ROW_Number()分页 如果查询的是两个表 他会提示 两个表有相同键 冲突 然后查不出数据
      

  12.   

    有别名 还是不行 提示多次指定了IDSELECT * 
        FROM 
            (SELECT *,ROW_NUMBER() OVER( ORDER BY RTime ) AS RowNumber 
              FROM  Info AS a INNER JOIN Para AS b ON a.ID = b.ID Where 1=1  ) AS RowNumberTableSource 
        WHERE RowNumber BETWEEN 1 AND 50
      

  13.   

    有别名 还是不行 提示多次指定了IDSELECT * 
        FROM 
            (SELECT *,ROW_NUMBER() OVER( ORDER BY RTime ) AS RowNumber 
              FROM  Info AS a INNER JOIN Para AS b ON a.ID = b.ID Where 1=1  ) AS RowNumberTableSource 
        WHERE RowNumber BETWEEN 1 AND 50
      

  14.   

    方式一:
    DECLARE @Sql varchar(3250)

    SET @Sql = 'WITH DataList AS (
    select ROW_NUMBER() OVER (ORDER BY biao_ID) AS RowNumber , *  from dbo.biao)
    SELECT  *  FROM  DataList
    WHERE RowNumber BETWEEN 5 AND 10'exec (@Sql)
    方式二:
    SELECT  * FROM  
    (select ROW_NUMBER() OVER (ORDER BY biao_ID) AS RowNumber , *  from dbo.biao) as DataList
    WHERE RowNumber BETWEEN 5 AND 10