PL / SQL开发人员-Oracle10g
我有一个查询,当使用LIKE运算符进行设置时,该索引丢失了索引,但仅带有前缀“%”
例如:
select * from people where name like '%POTATO'
它在优化程序目标表中返回“访问已满”。 如何获得轮廓解决方案?
答案 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'