【发布时间】:2020-09-01 07:20:35
【问题描述】:
我对这个查询有疑问。它进入循环,我的意思是 15 分钟后查询未完成 但是如果删除其中一个左连接有效 我哪里错了?
Select distinct a.sito,
Count(distinct a.id_us) as us,
Count (distinct b.id_invmat) as materiali,
Count (distinct c.id_struttura) as Struttura,
Count(distinct d.id_tafonomia) as tafonomia
From us_table as a
Left join invetario_materiali as b on a.sito=b.sito
Left join struttura_table as c on a.sito=c.sito
Left join tafonomia_table as d on a.sito=d.sito
Group by a.sito
Order by us
谢谢 E
【问题讨论】:
-
这里不需要做 SELECT DISTINCT,因为 GROUP BY 不返回重复项。
-
请在代码问题中给出minimal reproducible example--包括剪切、粘贴和可运行的最小代码和以代码形式给出的最小代表性数据。对于包含 DBMS 和 DDL 的 SQL,包括约束、索引和表格初始化。对于包括 EXPLAIN 结果和统计信息的 SQL 性能。请研究和总结。对于包括优化/性能基础的 SQL——立即导致索引、计划、统计和 SARGability。 Tips for asking a good SQL question 在您学习并应用了这些基础知识后,请重新优化。 How to Ask
-
JOIN 和聚合需要格外小心。确保不要多次计算相同的项目。我会说,如果有疑问 - 在加入之前聚合。
-
@jarlh 谢谢你是对的。直到限制 128 运行良好,我的意思是在一秒钟内查询响应。在该 utilll 限制 140 之后,它需要 22-24 秒。从限制 150 我有一个错误:设备上没有剩余空间
-
您可以尝试关联子查询而不是左连接。
标签: sql count left-join postgresql-11