Я только что обнаружил, что наш текущий дизайн базы данных немного неэффективен в соответствии с запросами 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]