Sql Server: нижняя функция в индексированном столбце - PullRequest
4 голосов
/ 14 января 2010

Я нашел одну большую проблему.

Я добавил функцию Lower в индексированный столбец одной из таблиц для извлечения данных. Таблица содержит более 100 тыс. Записей.

При извлечении записей загрузка процессора увеличивается до 100%.

Я не мог понять, как это радикальное изменение может произойти только благодаря функции Lower ().

Пожалуйста, помогите!

Ответы [ 2 ]

9 голосов
/ 14 января 2010

Что вы могли бы сделать, если вам действительно нужен этот запрос, это создать постоянный вычисляемый столбец, использующий функцию LOWER ().Индексируйте этот столбец, и у вас снова все будет в порядке:

ALTER TABLE dbo.YourTableName
  ADD LowerFieldName AS LOWER(YourFieldName) PERSISTED

CREATE NONCLUSTERED INDEX IX_YourTableName_LowerFieldName
  ON dbo.YourTableName(YourFieldName)

Это сохранит представление вашего поля в таблице в нижнем регистре, оно всегда актуально, и, поскольку оно сохраняется, оно является частью вашей таблицы.и не влечет за собой штраф за функцию LOWER ().Поместите в него индекс, и ваш поиск должен быть таким же быстрым, как и раньше.

Ссылки:

7 голосов
/ 14 января 2010

Когда вы добавляете LOWER () (или любую функцию) вокруг столбца, больше нельзя использовать индекс (он больше не поддерживает SARG).

По умолчанию SQL Server не чувствителен к регистру, поэтому вы можете удалить его.

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