0

我经常运行这个查询,我想优化它。

select
    number || ' ' || name
from tasks
where upper(number || ' ' || name) like '%VALUE%'

我创建了一个索引,但它与没有索引的时间相同

create index name on tasks (upper(number || ' ' || name))

还有其他选择吗?

4

2 回答 2

3

您应该考虑使用文本索引: http ://docs.oracle.com/cd/E11882_01/text.112/e24435/overview.htm#i1007403

于 2013-10-09T21:42:50.703 回答
2

如果您确定条件的选择性足以证明使用索引是合理的,那么您可能想尝试使用以下方法促进索引快速全扫描

select /*+ INDEX_FFS(tasks your_index_name) */
       number || ' ' || name
from   tasks
where  upper(number || ' ' || name) like '%VALUE%'

编辑:

我似乎记得推广 IFFS 的另一种方式是:

select number || ' ' || name
from   tasks
where  rowid in (
         select rowid
         from   tasks
         where  upper(number || ' ' || name) like '%VALUE%')

令人惊讶的是,效率几乎没有前一种方法低。

于 2013-10-09T21:28:31.930 回答