PL/SQL Developer - Oracle10g
我有一个查询,当它用LIKE运算符设置时,它会丢失索引,但只有前缀"%“
例如:
select * from people where name like '%POTATO'它在优化器目标的表中返回'access full‘。如何获得轮廓解决方案?
发布于 2019-07-12 03:01:30
如果您认为使用这样一个特殊的名称结尾进行查询非常重要,请考虑创建一个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'发布于 2019-07-13 18:11:18
优化器将消耗各种方法的成本,包括全表扫描和索引全扫描。据推测,它的计算表明全表扫描会更有效率。这很有可能是因为你必须对整个索引进行全扫描才能找到以“土豆”结尾的关键字,而以“土豆”开头的关键字存储在一起(就像在电话簿中一样)。
如果您共享了表和索引的详细信息、数据量和执行计划,可能会有人提供更详细的建议。
发布于 2019-07-12 02:31:17
你可以尝试使用一个提示:
select /*+ INDEX(people indexname) */ * from people where name like '%POTATO'https://stackoverflow.com/questions/56995186
复制相似问题