Подстрока-индексирование в Oracle

Я только что обнаружил, что наш текущий дизайн базы данных немного неэффективен в соответствии с SELECT запросы мы выполняем самые. IBANs-это позиционные координаты, в соответствии с национальными форматами.

так как мы в основном выполняют JOINs и WHEREs на точной подстроке столбцов IBAN в некоторых таблицах мой вопрос заключается в назначении индекса подстроке (- ам) столбца

вынуждены ли мы добавлять избыточные и индексированные столбцы в таблицу? То есть. добавлять колонки NATION_CODE, IBAN_CIN, IT_CIN, IT_ABI, IT_CAB, IT_ACCOUNT (где поля IT_ рассматриваются только для учетных записей, начиная с ITXX) каждый с соответствующей вторичной индексацией или существует ли какой-либо специальный вторичный индекс, который может применяться только к подстроке столбца?

первое решение может сделать БД более сложной, так как учетные записи IBAN используются по всей СУБД (и, очевидно, у меня нет полного контроля над дизайн.)

спасибо

[Edit] типичный запрос

SELECT * FROM DELEGATIONS WHERE SUBSTR(IBAN, 6, 5) IN (SELECT ABI FROM BANKS WHERE ANY_CONDITION)

извлекает все делегации платежей, где целевой счет принадлежит любому из банков, которые соответствуют условию. Следует изменить на

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]

2 ответов


мы ищем


Если вы используете Oracle 11g, вы можете посмотреть на использование виртуальные столбцы и затем индексировать их. Это в значительной степени эквивалентно ответу Рене, но может обеспечить немного больше формальности вокруг использования данных, так что используются только правильные символы.

виртуальные столбцы не будут занимать дополнительное пространство в базе данных, хотя любой индекс, созданный в этом виртуальном столбце, будет.