前缀为“%”的LIKE运算符中的索引丢失

时间:2019-07-11 18:16:42

标签: sql oracle oracle10g

PL / SQL开发人员-Oracle10g

我有一个查询,当使用LIKE运算符进行设置时,该索引丢失了索引,但仅带有前缀“%”

例如:

select * from people where name like '%POTATO'

它在优化程序目标表中返回“访问已满”。 如何获得轮廓解决方案?

3 个答案:

答案 0 :(得分:2)

如果您认为通过这样一个特殊的名称结尾进行查询非常重要,请考虑创建一个function-based索引:

create index idx_special_people
on people(upper(substr(name,-6)));

收集表统计信息:

exec dbms_stats.gather_table_stats(user, 'people', cascade => true);

并致电:

select * 
  from people 
 where upper(substr(name,-6)) = 'POTATO'

答案 1 :(得分:0)

优化器将花费各种方法,包括全表扫描和索引全扫描。据推测,它的计算表明全表扫描会更有效。这很可能是因为您必须全扫描整个索引才能找到以“ POTATO”结尾的键,而以“ POTATO”开头的键被存储在一起(如电话簿中一样)。

如果您共享表和索引的详细信息,数据量和执行计划,则有人可能会提供更详细的建议。

答案 2 :(得分:-5)

您可以尝试使用提示:

select /*+ INDEX(people indexname) */ * from people where name like '%POTATO'