【发布时间】:2020-10-08 19:39:59
【问题描述】:
我有时会遇到连接和“OR”子句的问题。例子简化了,但说明了问题的意思:
select a.ID, b.ID
from table a
left join table2 b on (a.ID = b.ID)
结果:20k 行和 0.2 秒
select a.ID, b.ID
from table a
left join table2 b on (a.ID2 = b.ID2)
结果:20k 行和 0.2 秒
select a.ID, b.ID
from table a
left join table2 b on (a.ID = b.ID or a.ID2 = b.ID2)
结果:20k 行,时间为 30 秒!
平台:Oracle 11xe linux。
为什么执行时间会有这样的差异?
【问题讨论】:
-
您的查询一开始就不是有效的 SQL。你在哪里定义
b? -
"b" 是 table2 的别名
-
请在代码问题中给出minimal reproducible example--包括剪切、粘贴和可运行的最小代码和以代码形式给出的最小代表性数据。对于包含 DBMS 和 DDL 的 SQL,包括约束、索引和表格初始化。对于包括 EXPLAIN 结果和统计信息的 SQL 性能。请研究和总结。对于包括优化/性能基础的 SQL——立即导致索引、计划、统计和 SARGability。 Tips for asking a good SQL question 在您学习并应用了这些基础知识后,请重新优化。 How to Ask
-
请通过编辑而不是 cmets 澄清。
标签: oracle performance join