我有以下查询
SELECT * FROM TABLA_A
WHERE
CAMPO_1 IN (
SELECT CAMPO_X FROM TABLA_B
)
OR
CAMPO_2 IN (
SELECT CAMPO_X FROM TABLA_B
)
查询有效,我希望可以优化调用,in
因为它们是相同的。我怀疑是否存在性能损失,因为对同一个查询进行了两次调用
尽可能多地TABLA_A
编辑它们TABLA_B
可以包含重复的记录
我有以下查询
SELECT * FROM TABLA_A
WHERE
CAMPO_1 IN (
SELECT CAMPO_X FROM TABLA_B
)
OR
CAMPO_2 IN (
SELECT CAMPO_X FROM TABLA_B
)
查询有效,我希望可以优化调用,in
因为它们是相同的。我怀疑是否存在性能损失,因为对同一个查询进行了两次调用
尽可能多地TABLA_A
编辑它们TABLA_B
可以包含重复的记录
Using
EXISTS()
,它检查至少一条记录,只为两列生成子查询 1 次:Demo en SQLfiddle
而且,进一步简化,我们可以使用
IN
相反的意义:Demo en SQLfiddle
INNER JOIN是最简单的选择
必须说
or
可以用UNION替换以提高查询的性能,您没有在问题中指定,但是如果 a.FIELD_1 和 a.FIELD_2 的值都在 TABLE_B 中,此解决方案可以返回重复项。@Mariano 感谢您的贡献
节目
我同意 Mariano 的观点,只是他会省略 EXISTS 查询中的字段,如下所示:
PS:抱歉无法评论马里亚诺的回答,但我还没有足够的分数。
的确,JOIN 是优化查询的最佳方式,只是在这里我们要澄清的是,根据您要解决的问题,您可以使用 JOIN、RIGHT JOIN、LEFT JOIN。
如前所述,有必要更多地了解您要解决的问题。
所以我建议你阅读一点关于 Join 的内容,老实说,在工作中找到使用 JOIN 的查询是很常见的,所以要注意那个子句。
问候。