我有以下(简化)查询

select P.peopleID, P.peopleName, ED.DataNumber
from peopleTable P
    left outer join (
        select PE.peopleID, PE.DataNumber
        from formElements FE
             inner join peopleExtra PE on PE.ElementID = FE.FormElementID
        where FE.FormComponentID = 42
    ) ED on ED.peopleID = P.peopleID

如果没有子查询,这个过程需要大约 7 秒,但有了它,大约需要 3 分钟。

鉴于表 peopleExtra 相当大,是否有更有效的方法来执行该连接(不重组数据库)?

更多细节:

子查询的内部部分,例如
  select PE.peopleID, PE.DataNumber
        from formElements FE
             inner join peopleExtra PE on PE.ElementID = FE.FormElementID
        where FE.FormComponentID = 42

执行时间在
peopleTable 中有 1500 个条目。

最佳答案

您的查询没问题,只需创建以下索引:

PeopleExtra (PeopleID) INCLUDE (DataNumber, ElementID)
FormElements (FormComponentID, FormElementID)

不需要重写连接( SQL Server 的优化器可以很好地处理嵌套查询),尽管它可以使您的查询更具人类可读性。

关于sql - 更高效的大表左连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2766570/

10-13 09:32