代码之家  ›  专栏  ›  技术社区  ›  Ryan Gadsdon

减少联接的逻辑读取-SQL Server

  •  1
  • Ryan Gadsdon  · 技术社区  · 6 年前

    T1的逻辑读取量约为130000,而T2的逻辑读取量为140万。t2大约容纳280万行。有没有什么方法可以从性能的角度减少这些读取?下面的查询示例:

    SELECT T1.[ID],T1.[Name],T1.[City],T2.[Number]
    FROM T1
    LEFT JOIN T2 ON T2.[ID] = T1.[ID]
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    您可以优化此查询:

    SELECT T1.[ID], T1.[Name], T1.[City], T2.[Number]
    FROM T1 LEFT JOIN
         T2
         ON T2.[ID] = T1.[ID];
    

    通过创建索引。相应的索引已打开 T2(ID, Number) . 你可以 include 索引中的数字而不是将其作为键,但我猜想它可能对其他查询中的索引有用。

        2
  •  2
  •   Wolfgang Kais    6 年前

    创建两个非聚集索引:

    • 在t2上,索引字段 身份证件 包括这个领域 .
    • 在T1上,索引字段 身份证件 名字 包括这个领域 西蒂 .

    这样,查询就被索引所覆盖(SQL Server将只访问索引页)。

    如果这不能显著提高查询性能,请尝试对联接使用“提示”:

    SELECT T1.[ID], T1.[Name], T1.[City], T2.[Number]
    FROM T1
    LEFT HASH JOIN T2 ON T2.[ID] = T1.[ID]
    

    请分享结果(访问的页数)。