我正在运行这个oracle查询,但它耗费了大量时间,我也尝试过索引,但仍然需要花费大量时间。 可以调整以下查询,也可以以其他方式写入以快速执行。
select *
from table1
where (col_1 like '8%' OR col_1 like '9%')
and col_1 not in (select col_11
from table2
where id =2
and (col_11 like '9%' OR col_11 like '8%'))
答案 0 :(得分:2)
这很慢
where field not in (subquery)
这不太直观,但更快
where field in (select all the values
minus
select the values you don't want)
其他变体包括
where not exists(subquery)
或
from table1 left join table2 on table1.field = table2.field
where table2.field is null
答案 1 :(得分:1)
我建议将查询编写为:
select t1.*
from table1 t1
where (col_1 like '8%' or col_1 like '9%') and
not exists (select 1
from table2 t2
where t2.col_11 = t1.col1 and t2.id = 2
);
(t2.col_11 like '9%' OR t2.col_11 like '8%')
上子查询中的条件已由t2.col_11 = t1.col1
和外部条件处理。
然后,对于此查询,您需要table2(col_11, id)
上的索引。
您可以在table1(col_1)
上尝试索引。但是,这可能不足以提高查询性能。