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

时间:2018-07-25 11:08:22

标签: sql sql-server performance join

T1的逻辑读数约为130,000,而T2的逻辑读数为140万。 T2拥有约280万行。从性能的角度来看,有什么方法可以减少这些读取?下面的查询示例:

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

2 个答案:

答案 0 :(得分:2)

创建两个非聚集索引:

  • 在T2上,为字段 ID 编制索引,并包含字段 Number
  • 在T1上,为字段 ID Name 编制索引,并包含字段 City

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

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

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

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

答案 1 :(得分:1)

您可以优化此查询:

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

通过创建索引。适当的索引位于T2(ID, Number)上。您可以在索引中include而不是将其用作键,但是我猜想它可能对其他查询中的索引很有用。