Oracle中的子字符串索引

usr*_*ΛΩΝ 6 sql oracle indexing performance

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

由于我们主要在某些表中的IBAN列的精确子字符串上执行JOINs和WHEREs,因此我的问题是为列的子字符串分配索引

我们是否被迫在表中添加冗余和索引列?IE浏览器.添加列NATION_CODE,IBAN_CIN,IT_CIN,IT_ABI,IT_CAB,IT_ACCOUNT(其中IT_字段被认为仅适用于在开始ITXX帐户)每一个与适当的二级索引是否有任何特殊的二级索引的,可以仅在一列的子串被施加?

第一个解决方案可能会使DB更复杂,因为IBAN帐户在整个DBMS中使用(显然,我没有完全控制设计).

谢谢

[编辑]典型查询

SELECT * FROM DELEGATIONS WHERE SUBSTR(IBAN, 6, 5) IN (SELECT ABI FROM BANKS WHERE ANY_CONDITION)
Run Code Online (Sandbox Code Playgroud)

提取目标帐户所属的任何银行,其中包含与CONDITION匹配的任何银行.应该改为

SELECT * FROM DELEGATIONS WHERE SUBSTR(IBAN, 1, 2) = 'IT' AND SUBSTR(IBAN, 6, 5) IN (SELECT ABI FROM BANKS WHERE ANY_CONDITION)
Run Code Online (Sandbox Code Playgroud)

确保BBAN确实持有数字的银行代码[6-11]

Ren*_*ger 9

您正在寻找基于函数的索引:

create index ix_substring on TABLE (substr(COLUMN, 4, 9))
Run Code Online (Sandbox Code Playgroud)