Oracle查询需要时间

时间:2018-04-11 12:25:39

标签: sql oracle query-performance sql-tuning

我正在运行这个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%'))

2 个答案:

答案 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)上尝试索引。但是,这可能不足以提高查询性能。