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

标签 sql oracle join oracle10g left-join

我正在使用类似于以下形式的 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/

相关文章:

mysql - 查找可用日期

sql - 如何在 hana SQL 查询中执行 IF EXISTS

sql - 相关子查询,oracle sql

java.sql.SQLException : ORA-00932: inconsistent datatypes: expected NUMBER got BINARY 异常

javascript - SQL Server 在一次调用中返回两次结果?

sql - 有没有办法使用 BigQuery 的 DAYOFWEEK 但以星期一为第一天?

sql-server - 查询在 Oracle SQL Developer 中运行很快,但在 SSRS 2008 R2 中运行缓慢

mysql - 如何提高 mysql 查询执行性能

sql-server - 如何在 SQL Server 中同时使用 PIVOT 和 JOIN?

mysql - 使用内连接时 SQL 结果未达到预期