Аннотация:
Я создаю новую таблицу в SQL Server 2012 в рамках проектирования бизнес-системы. В таблице есть 3 столбца (среди прочего) с типом nvarchar
различных размеров, моему веб-приложению необходимо запросить эти 3 столбца, используя один строковый поисковый запрос. Эта таблица может содержать записи не более 100К.
Я хотел бы проиндексировать эти столбцы в SQL Server 2012 таким образом, чтобы было наиболее эффективно получать результаты.
Я хотел бы подчеркнуть, что вопросы, которые я собираюсь задать, относятся к моему конкретному случаю, а не к общим вопросам индекса SQL. Хотя ответы на них можно применить и к общим вопросам.
Контекст
- SQL Server 2012
- Windows Сервер 2008
Определения столбцов таблицы:
- ItemNumber :: nvarchar(10)
- Производитель :: nvarchar(20)
- Описание :: nvarchar(40)
Возможное количество записей: до 100 тыс.
Случай использования:
Конечный пользователь (один из 1000 или около того) передаст одну строку для поиска в этих трех столбцах, и запрос должен вернуть все строки, в которых любой из этих трех столбцов содержит значение искомой строки (без учета регистра).
Вопросы:
- Каков наилучший способ создания индексов, чтобы запрос возвращал данные наиболее эффективным способом (быстро при минимальном использовании ресурсов SQL Server)?
- Создать индекс для каждого столбца?
- Создать один индекс со всеми тремя столбцами?
- Включить полнотекстовый поиск по индексу(ам)?
- Какой метод позволит использовать весь потенциал того, что может предложить SQL Server 2012?
char(n)
илиnchar(n)
для всего, что длиннее 5 или, может быть, макс. 10 символов. не используйтеnchar(20)
или, что еще хуже,nchar(40)
- это огромная пустая трата места, и вы никогда не получите приличной производительности с таким дизайном. Для всего, что превышает 10 символов, я бы всегда рекомендовал использоватьvarchar/nvarchar(x)
вместо версий с фиксированной длиной ..... - person marc_s   schedule 03.07.2013... ItemNumber LIKE '%searchterm%'
совпадений автоматически гарантирует, что никакие индексы никогда не будут использоваться --› ваша производительность будет ужасной.... - person marc_s   schedule 03.07.2013... WHERE ItemNumber LIKE '%....%'
, вы гарантируете уверенность, что никакие индексы никогда не будут использоваться, и ваша производительность будет ужасной — независимо от того, какие индексы у вас есть. - person marc_s   schedule 03.07.2013