我有以下查询:
select id,
c1,
c2,
c3
from tbl t1
join
(select id
from tbl t2
where upper(replace(c5, ' ', '')) like upper(?)
) j
on j.id = t1.id
?
是一些通配符参数字符串,例如%test%
.
c5
列具有用于访问它的函数的索引:
create index tbl_c5_idx on tbl(upper(replace(c5, ' ', '')))
当我只运行内部查询时,它使用tbl_c5_idx
,但是当我运行整个查询时,它变成了全表扫描,这要慢得多。
有什么办法可以避免全表扫描?提示或重写连接条件。我无法重写整个查询,因为内部查询是根据输入条件动态构建的。