我有一个查询,它使用IN
子句(也可以使用EXISTS
)用于多个列,这些列使用OR
Clause中的WHERE
子句进行过滤。是否有更好的方法来编写此查询。
SELECT columndata FROM TABLE1
WHERE column1key in (select columnkey from #temptable1)
OR column2key in (select columnkey from #temptable2)
OR column3key IN (SELECT columnkey FROM #temptable3)
答案 0 :(得分:0)
你可以选择“LEFT JOIN'如下图所示
SELECT columndata
FROM TABLE1 tab1
LEFT JOIN #temptable1 t1 on tab1.column1key = t1.columnkey
LEFT JOIN #temptable2 t2 on tab1.column2key = t2.columnkey
LEFT JOIN #temptable3 t3 on tab1.column3key = t3.columnkey
答案 1 :(得分:0)
通过这种方式,您可以获得更好的性能,这会将SELECT分解为单独的查询,以后再进行重复数据删除。
SELECT columndata FROM TABLE1
WHERE column1key in (select columnkey from #temptable1)
UNION
SELECT columndata FROM TABLE1
WHERE column2key in (select columnkey from #temptable2)
UNION
SELECT columndata FROM TABLE1
WHERE column3key IN (SELECT columnkey FROM #temptable3)
但你真的要尝试它
如果没有索引或索引不好,您仍然需要扫描然后相同数量的数据。有了好的索引,这可能会更好......
作为附注,EXISTS和IN将在此处提供相同的计划