【问题标题】:Transact sql query perfomance adviceTransact sql 查询性能建议
【发布时间】:2013-07-18 14:45:59
【问题描述】:

我有 2 个选择查询。第一个执行网格分页选择(每页 25 行)(using TOP @pagesize*@pagenum EXCEPT TOP @pagesize*(@pagenum-1) construction)。第二次查询总行数。

那么,WITH AS 构造会比两个分离的查询提高性能,如果是,为什么?请注意,该查询包含多个列、INNER JOIN 和 WHERE 条件。

【问题讨论】:

    标签: sql-server performance tsql


    【解决方案1】:
    1. 本身的部分对性能没有帮助。它使查询更容易理解。
    2. 如果我理解正确,计数适用于所有行。如果您将所有行都发送给客户端,则可以节省第二次调用,但在大多数情况下会更昂贵。
    3. 使用前 X 只获取最后 X/Y 行是一个坏主意。您应该添加一个自动编号并选择自动编号在所需范围内的行。

      SELECT ROW_NUMBER() OVER (ORDER BY [Something] DESC) FROM ... WHERE [RowNumber] 10 到 20 之间

    【讨论】:

      【解决方案2】:

      或者,如果您使用 ORDER BY ... OFFSET 而不是 TOP ... ORDER BY 您可以使用 COUNT(*) OVER () 来获取所有行,而不管分页。否则,您必须使用 WITH(就像您所做的那样)隔离数据并使用第二个表以及其他任何内容(行号、页数、总页数等)进行分页。

      没有偏移的例子:

          DECLARE @page INT = 1, @rows INT = 5
      
          ;WITH data AS  (SELECT * FROM mytable where  id = 454545) --possible filters
      
                ,rows ([page], [pages], [rows]) AS
                (
                SELECT @page, CEILING(CAST(COUNT(*) AS float)/@rows), COUNT(*) FROM data
                )
                SELECT TOP (@rows) *
                FROM ( SELECT row_number() OVER (ORDER BY data.id) rowNumber, * FROM rows, data ) pagination
                WHERE rowNumber > (@page - 1) * @rows
                order by rowNumber
      

      偏移量示例:

      DECLARE @page INT = 1, @rows INT = 5
      
          SELECT 
          row_number() OVER (order by id ) rowNumber,@page Page,(CEILING(CasT(COUNT(*) OVER () as float)/@rows)) Pages,
          COUNT(*) OVER () Rows, *
      
          from mytable where  id = 454545 --possible filters
          order by rowNumber 
          OFFset (@page-1)*@rows rows 
          FETCH NEXT @rows rows ONLY
      

      在这两种情况下,请确保 order by 是绝对的,否则无法保证您的分页

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多