我有以下(简化)查询
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/