oracle - 如何避免 OR 扩展?
问题描述
如果在连接条件中使用 OR 运算符,如何优化以下查询以避免 SQL 调优方面的 OR 扩展?
SELECT t1.A, t2.B, t1.C, t1.D, t2.E
FROM t1 LEFT JOIN t2
ON t1.A=t2.A OR t1.B=t2.C;
解决方案
具有 OR 条件将忽略使用索引。因此,一旦您拥有以下索引 -
t1 (A, B)
t2 (A, C)
您可以尝试以下具有 UNION ALL 子句的查询 -
SELECT t1.A, t2.B, t1.C, t1.D, t2.E
FROM t1 LEFT JOIN t2 ON t1.A=t2.A
UNION ALL
SELECT t1.A, t2.B, t1.C, t1.D, t2.E
FROM t1 LEFT JOIN t2 ON t1.B=t2.C;
此查询将使用索引并且可能执行得更快。
推荐阅读
- python - matplotlib:在 3D 轴上绘制路径
- logistic-regression - R 代码从 10 CV 中的 Logistic 回归模型中提取 ROC
- python-3.x - Python:如果单词中的字符是字母,则仅保留超过 3 个单词的行
- node.js - 无法确定您的项目使用哪个原生 SDK 版本,因为未安装模块 `expo`
- azure - 没有可用于服务此操作的连接:SETEX 令牌;redis缓存Dotnet Framework 4.5上的SocketFailure
- sharepoint - 使用用户信息添加/更新项目 Sharepoint Client C#
- reactjs - 我该如何渲染
作为 元素而不是作为?
- .net - 如果字符串包含多个值
- excel - 使用单元格的文本作为具有结构化引用的 range() 的参数
- flutter - 断言失败:第 24 行 pos 15:'color != null && color.alpha == 0xFF':不正确