Индекс подстроки в Oracle - PullRequest
6 голосов
/ 13 декабря 2011

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

Поскольку мы в основном выполняем JOIN с и WHERE с на точной подстроке столбцов IBAN в некоторых таблицах, мой вопрос касается назначения индекса для подстроки (ей) столбца

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

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

Спасибо

[Редактировать] Типичный запрос

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 ]

9 голосов
/ 13 декабря 2011

Вы ищете индекс на основе функции :

create index ix_substring on TABLE (substr(COLUMN, 4, 9))
4 голосов
/ 13 декабря 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...