首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Oracle中的子字符串索引

Oracle中的子字符串索引
EN

Stack Overflow用户
提问于 2011-12-13 02:21:20
回答 2查看 18.4K关注 0票数 6

我刚刚发现,根据我们执行最多的SELECT查询,我们当前的数据库设计有点效率低下。根据特定于国家的格式,IBANs是位置坐标。

由于我们在某些表中对IBAN列的精确子字符串执行JOINs和WHEREs,所以我的问题是为列的子字符串分配索引。

我们是否被迫向表中添加冗余和索引列?即。添加列NATION_CODEIBAN_CINIT_CINIT_ABIIT_CABIT_ACCOUNT (其中IT_字段仅用于从ITXX开始的帐户)每一列都有适当的二级索引,是否有任何特殊类型的辅助索引只能应用于列的子字符串?

第一种解决方案可能会使DB变得更加复杂,因为IBAN帐户一直在使用DBMS (显然,我对设计没有完全的控制)。

谢谢

编辑典型查询

代码语言:javascript
运行
AI代码解释
复制
SELECT * FROM DELEGATIONS WHERE SUBSTR(IBAN, 6, 5) IN (SELECT ABI FROM BANKS WHERE ANY_CONDITION)

提取目标账户属于符合条件的任何银行的所有支付授权。应改为

代码语言:javascript
运行
AI代码解释
复制
SELECT * FROM DELEGATIONS WHERE SUBSTR(IBAN, 1, 2) = 'IT' AND SUBSTR(IBAN, 6, 5) IN (SELECT ABI FROM BANKS WHERE ANY_CONDITION)

以确保BBAN真正将银行代码保存在数字6-11中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-13 02:24:50

你在找基于功能的索引

代码语言:javascript
运行
AI代码解释
复制
create index ix_substring on TABLE (substr(COLUMN, 4, 9))
票数 10
EN

Stack Overflow用户

发布于 2011-12-13 03:19:54

如果您使用的是Oracle11g,您可以考虑使用虚拟列,然后对它们进行索引。这与勒内的回答相当,但可能会在数据的使用方面提供更多的形式化,从而只使用正确的字符。

虚拟列不会占用数据库中的任何额外空间,尽管您在该虚拟列上创建的任何索引都会占用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8487520

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文