首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >前缀为"%“的LIKE运算符中的索引丢失

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

Stack Overflow用户
提问于 2019-07-12 02:16:42
回答 3查看 312关注 0票数 1

PL/SQL Developer - Oracle10g

我有一个查询,当它用LIKE运算符设置时,它会丢失索引,但只有前缀"%“

例如:

代码语言:javascript
复制
select * from people where name like '%POTATO'

它在优化器目标的表中返回'access full‘。如何获得轮廓解决方案?

EN

回答 3

Stack Overflow用户

发布于 2019-07-12 03:01:30

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

代码语言:javascript
复制
create index idx_special_people
on people(upper(substr(name,-6)));

收集表统计信息:

代码语言:javascript
复制
exec dbms_stats.gather_table_stats(user, 'people', cascade => true);

并调用为:

代码语言:javascript
复制
select * 
  from people 
 where upper(substr(name,-6)) = 'POTATO'
票数 2
EN

Stack Overflow用户

发布于 2019-07-13 18:11:18

优化器将消耗各种方法的成本,包括全表扫描和索引全扫描。据推测,它的计算表明全表扫描会更有效率。这很有可能是因为你必须对整个索引进行全扫描才能找到以“土豆”结尾的关键字,而以“土豆”开头的关键字存储在一起(就像在电话簿中一样)。

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

票数 0
EN

Stack Overflow用户

发布于 2019-07-12 02:31:17

你可以尝试使用一个提示:

代码语言:javascript
复制
select /*+ INDEX(people indexname) */ * from people where name like '%POTATO'
票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56995186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档