Я создаю новую таблицу в SQL Server 2012 как часть дизайна бизнес-системы. Таблица имеет 3 столбца (среди прочих) с типом nvarchar
разных размеров, мое веб-приложение должно запрашивать эти 3 столбца, используя однострочный поисковый запрос. Эта таблица может содержать записи не более 100K.Каков наиболее эффективный способ индексирования в SQL Server на трех столбцах nchar в этом случае?
Я хотел бы индексировать эти столбцы в SQL Server 2012 таким образом, чтобы было бы наиболее эффективно получать результаты.
Я хотел бы подчеркнуть, что вопросы, которые я собираюсь задать, относятся к моему конкретному случаю, а не к общим вопросам индекса SQL. Хотя ответы на них могут быть применены и к общим вопросам.
Контекст
определения столбцов таблицы 2012
- ItemNumber :: NVARCHAR (10)
- Производитель :: NVARCHAR (20)
- Описание :: NVARCHAR (40)
Возможное количество записей: до 100K
Use Case:
Конечный пользователь (один из 1000 или около того) передаст одну строку для поиска этих трех столбцов, и запрос должен вернуть все строки, где любой из этих 3 столбцов содержит значение искомой строки (без учета регистра).
вопросы:
- Что является лучшим способом, чтобы создать индекс (ы) таким образом, что запрос будет возвращать данные в наиболее эффективным образом (быстро, минимизируя использование SQL ресурсов сервера)?
- Создать индекс для каждого столбца?
- Создайте один индекс со всеми тремя столбцами в комплекте?
- Включить полнотекстовый поиск по индексам (-ам)?
- Какой метод будет использовать весь потенциал того, что может предложить SQL Server 2012?
Я бы *** НЕ *** рекомендуем использовать 'char (n)' или 'nchar (n)' для чего-либо более 5 или, может быть, max. 10 символов. Do ** not ** use 'nchar (20)' или даже хуже - 'nchar (40)' - это огромная ** пустота пространства, и вы никогда не получите достойную производительность с таким дизайном. Для чего-либо более 10 символов, я бы *** всегда *** рекомендуем использовать 'varchar/nvarchar (x)' вместо версий с фиксированной длиной ..... –
Последний комментарий: если вы говорите *, где любой из трех столбцов ** содержит ** текст поиска *, то вам нужно либо использовать полнотекстовый поиск, либо вы смотрите на '... ItemNumber LIKE ' % searchterm% ''автоматически будет гарантировать, что ** никакие индексы ** никогда не будут использоваться -> ваша производительность будет ужасной .... –
@marc_s благодарит за все полезные комментарии! Я обновил тип данных в моей публикации. Я хочу, чтобы основное внимание в этой статье было посвящено эффективной индексации в этом сценарии. –