我有一个非常大的表,我需要采用满足这些要求的各行:
TABLE: id c1 c2 c3 c4 c5 1 101 102 1 2 3 2 101 102 3 2 1 3 105 104 6 0 1 4 103 108 2 0 0 RESULTS: id c1 c2 c3 c4 c5 1 101 102 1 2 3 2 101 102 3 2 1 3 105 104 6 0 1
QUERY SELECT * FROM table WHERE ((column1, column2) IN ( SELECT column1, column2 FROM table WHERE ... GROUP BY column1, column2 HAVING COUNT(*) > 1 ) ) OR column3 > 5;
我想知道此查询的内部功能,以了解发生了什么以及为什么需要花费这么多时间。
最好的方法是什么?
谢谢你,对不起我的英语。
答案 0 :(得分:1)
尝试消除in子句的分析查询。它可以更快,因为它将消除连接。如果有条件,则应在嵌套查询中应用
select distinct * from (
select t.*, count(1) over (partition by column1, column2) cnt
from table t where ...)
where cnt > 1
如果您在column1和column2上有索引,那么您的查询可能会运行得更快。它将执行全表扫描,也可能执行散列连接。如果您可以分享解释计划,我可以指出问题。