oracle - Oracle - 使用 Left Join ON Where IS NULL 时性能不佳
问题描述
作为我的标题。我有以下代码:
SELECT * FROM
(SELECT "Student_ID", "ID_Card", "First_Name", "Last_Name" FROM "STUDENT@DBLA
WHERE "YEAR" = 2018 AND "SEX" = 'FEMALE') T
LEFT JOIN (SELECT Student_ID, ID_Card, First_Name, Last_Name FROM schema.STUDENTS
WHERE YEAR = 2018 AND SEX = 'FEMALE') D
ON D.ID_Card = T."ID_Card" WHERE D.ID IS NULL;
此查询运行速度非常低,当我在后面添加 Where is null 子句时可能会停止。这个问题有什么解决办法吗?非常感谢!
解决方案
我们可以尝试将您的查询编写为直接左连接,而不使用子查询:
SELECT
t1.Student_ID,
t1.ID_Card,
t1.First_Name,
t1.Last_Name,
t2.Student_ID AS Student_ID_2
t2.ID_Card AS ID_Card_2,
t2.First_Name AS First_Name_2,
t2.Last_Name AS Last_Name_2
FROM "STUDENT@DBLA" t1
LEFT JOIN schema.STUDENTS t2
ON t1.ID_Card = t2.IDCard AND
t2.YEAR = 2018 AND t2.SEX = 'FEMALE' AND t2.ID IS NULL
WHERE
t1.YEAR = 2018 AND t1.SEX = 'FEMALE';
您可能希望在此处避免使用子查询的原因是它可以强制 Oracle 在您的总查询中实现中间结果。从性能的角度来看,这可能是昂贵的,原因有很多。
推荐阅读
- flutter - 颤振的邮件依赖项不起作用
- firebase - Firestore如何查询包含数组中任何值的字段
- python - 在多个条件下合并 Pandas 数据框
- android - 安卓广播短信
- laravel - Laravel Storage 不存储创建的 PDF 文件
- python - 当 discord bot 关闭时,会收到来自 asyncpg 错误的垃圾邮件
- java - 如何只填写 ArrayList 的偶数索引?
- python - 如何在符号之前和之后组合算术运算输入中的数字,例如“+”或“-”
- javascript - 使用回车键提交输入字段
- python - 如何理解 "{{{{{0}}}}}".format("test")