gpt4 book ai didi

sql - 两列性能问题的左外连接

转载 作者:行者123 更新时间:2023-12-04 01:26:33 25 4
gpt4 key购买 nike

我正在使用类似于以下形式的 SQL 查询:

SELECT col1, col2
FROM table1
LEFT OUTER JOIN table2
ON table1.person_uid = table2.person_uid
AND table1.period = table2.period

它要么太慢,要么陷入僵局,因为它至少需要 4 分钟才能返回。如果我要把它改成这样:
SELECT col1, col2
FROM table1
LEFT OUTER JOIN table2
ON table1.person_uid = table2.person_uid
WHERE table1.period = table2.period

然后它工作正常(尽管没有返回正确的列数)。有没有办法加快这个速度?

更新 :如果我切换后一个查询的最后两行,它会做同样的事情:
SELECT col1, col2
FROM table1
LEFT OUTER JOIN table2
ON table1.period = table2.period
WHERE table1.person_uid = table2.person_uid

更新 2:这些实际上是我加入的观点。不幸的是,它们位于我无法控制的数据库上,因此我无法(轻松)对索引进行任何更改。我倾向于同意这是一个索引问题。我会等一会儿再接受答案,以防万一有一些我不知道的神奇方法来调整这个查询。否则,我将接受当前的答案之一,并尝试找出另一种方法来做我想做的事情。到目前为止,感谢大家的帮助。

最佳答案

请记住,陈述 2 和 3 与第一个不同。

如何?好吧,你正在做一个左外连接,你的 WHERE 子句没有考虑到这一点(就像 ON 子句一样)。至少,请尝试:

SELECT col1, col2
FROM table1, table2
WHERE table1.person_uid = table2.person_uid (+)
AND table1.period = table2.period (+)

并查看您是否遇到相同的性能问题。

你在这些表上有什么索引?这种关系是否由外键约束定义?

您可能需要的是 person_uid 和 period(在两个表上)的复合索引。

关于sql - 两列性能问题的左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/444820/

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