【发布时间】:2012-08-24 13:20:56
【问题描述】:
我在一个包含超过 160 万条记录的表中的 Oracle 11GR2 中有一个简单的搜索存储过程。我很困惑,如果我想在一个列中搜索一个作品,例如“%boston%”,它需要 12 秒。我在名称列上有一个索引。
select description from travel_websites where name like "%boston%";
如果我只搜索以波士顿开头的单词,例如“boston%”,则只需 0.15 秒。
select description from travel_websites where name like "boston%";
我添加了一个索引提示并尝试强制优化器在名称列上使用我的索引,它也没有帮助。
select description /*+ index name_idx */ from travel_websites where name like "%boston%";
任何建议将不胜感激。
【问题讨论】:
-
除了下面的答案之外,如果在文本列中搜索词的位置存在一致的规则,您可以考虑使用基于函数的索引。例如。如果波士顿(或任何其他搜索词)从位置 X 开始或在(第 1、第 2 等)空间之后。然后将您的 where 谓词与索引函数匹配可以导致使用该函数。
标签: oracle performance indexing hint