gpt4 book ai didi

sql-server - 关于多个 LEFT JOIN 性能问题的聚合(SQL SERVER)

转载 作者:行者123 更新时间:2023-12-02 01:17:42 26 4
gpt4 key购买 nike

我遇到一个运行超过 30 分钟的非常简单的查询的性能问题:

SELECT   P.pID
,COUNT(T1.ID) AS NB1
,COUNT(T2.ID) AS NB2
,COUNT(T3.ID) AS NB3
,COUNT(T4.ID) AS NB4
,COUNT(T5.ID) AS NB5

FROM MainTable P

LEFT OUTER JOIN Table1 T1 ON P.pID = T1.pID
LEFT OUTER JOIN Table2 T2 ON P.pID = T2.pID
LEFT OUTER JOIN Table3 T3 ON P.pID = T3.pID
LEFT OUTER JOIN Table4 T4 ON P.pID = T4.pID
LEFT OUTER JOIN Table5 T5 ON P.pID = T5.pID

GROUP BY P.pID

每个查询都会在几毫秒内回复:

例如

  SELECT   P.pID
,COUNT(T1.ID) AS NB1

FROM MainTable P
LEFT OUTER JOIN Table1 T1 ON P.pID = T1.pID

GROUP BY P.pID

如果我不使用任何聚合(COUNT 或其他任何东西),查询将在几毫秒内运行:前任。 选择 P.pID

FROM MainTable P 

LEFT OUTER JOIN Table1 T1 ON P.pID = T1.pID
LEFT OUTER JOIN Table2 T2 ON P.pID = T2.pID
LEFT OUTER JOIN Table3 T3 ON P.pID = T3.pID
LEFT OUTER JOIN Table4 T4 ON P.pID = T4.pID
LEFT OUTER JOIN Table5 T5 ON P.pID = T5.pID

GROUP BY P.pID

显然所有索引都已设置等...唯一“变慢”的因素是 pID 是一个 varchar (50),但我无法更改它,在我看来这不是这里的主要问题。

我使用了一个变通方法,包括 union all 工作正常,但我真的想知道为什么这些这么长以及我如何优化它,因为聚合多个左连接在报告项目中确实很常见,不应该这么慢。

谢谢你的帮助。

[编辑]感谢 ARION 我得到了一个很好的查询,工作非常好。

但我主要关心的是了解在使用多个左连接编写查询的 sql 引擎中出了什么问题。

表描述为:

Table P (500 rows) 
pID varchar(50) NOT NULL as primary key
p.* doesn't matter

Table Tn (between 2000 and 8000 rows)
Tn.ID int NOT NULL as primary key
pID varchar(50) NOT NULL as Foreign key

[编辑] 感谢 social.msdn.microsoft.com 上的 Erland Sommarskog 指出我的分析错误。-- 关于答案的详细信息

请记住:
LEFT JOIN 形成笛卡尔积

我错误地假设笛卡尔积可能已被过滤,因为我总是引用同一个表。

谢谢

最佳答案

也许是这样的:

SELECT
P.pID,
(SELECT COUNT(*) FROM Table1 T1 WHERE P.pID = T1.pID) AS NB1,
(SELECT COUNT(*) FROM Table2 T2 WHERE P.pID = T2.pID) AS NB2,
(SELECT COUNT(*) FROM Table3 T3 WHERE P.pID = T3.pID) AS NB3,
(SELECT COUNT(*) FROM Table4 T4 WHERE P.pID = T4.pID) AS NB4,
(SELECT COUNT(*) FROM Table5 T5 WHERE P.pID = T5.pID) AS NB5

FROM MainTable P

关于sql-server - 关于多个 LEFT JOIN 性能问题的聚合(SQL SERVER),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9258706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com