Создать индекс по частичному столбцу CHAR
У меня есть столбец CHAR(250), который используется в качестве внешнего ключа для столбца varchar(24).
В MySQL я вспоминаю, что я мог создать столбец, определяющий индекс (24), чтобы создать индекс для самых левых 24 символов. Это не представляется возможным на MS SQL Server.
У меня вопрос такой:
Можно ли использовать индексированное представление в SQL Server 2008 для индексирования подстроки этого столбца, и если да, то будет ли это иметь какие-либо побочные эффекты на производительность таблицы?
2 ответа
Вы можете создать постоянный вычисляемый столбец, затем проиндексировать его, см. Создание индексов для вычисляемых столбцов.
alter table add newcolumn as cast(oldcolumn as varchar(24)) persisted;
create index table_newcolumn on table (newcolumn);
Я надеюсь, у вас есть хорошая причина для этого. Я предполагаю, что первые 24 символа предоставленной поставщиком таблицы на самом деле представляют собой отдельный атрибут и должны были быть в отдельном столбце.
Так...
Создайте представление таблицы продавца. Индексируйте это, если хотите. Я сомневаюсь, что вы можете указать ограничение FK на представление, но вы, конечно, можете написать триггер для того же эффекта. Проверка триггера на индексированное представление будет очень быстрой за счет небольшого увеличения времени обновления базовой таблицы представления.
НТН.