2013-07-02 1 views
3


Я создаю новую таблицу в SQL Server 2012 как часть дизайна бизнес-системы. Таблица имеет 3 столбца (среди прочих) с типом nvarchar разных размеров, мое веб-приложение должно запрашивать эти 3 столбца, используя однострочный поисковый запрос. Эта таблица может содержать записи не более 100K.Каков наиболее эффективный способ индексирования в SQL Server на трех столбцах nchar в этом случае?

Я хотел бы индексировать эти столбцы в SQL Server 2012 таким образом, чтобы было бы наиболее эффективно получать результаты.

Я хотел бы подчеркнуть, что вопросы, которые я собираюсь задать, относятся к моему конкретному случаю, а не к общим вопросам индекса SQL. Хотя ответы на них могут быть применены и к общим вопросам.

Контекст

определения столбцов таблицы 2012

  • Windows Server SQL Server:

    • ItemNumber :: NVARCHAR (10)
    • Производитель :: NVARCHAR (20)
    • Описание :: NVARCHAR (40)

    Возможное количество записей: до 100K

    Use Case:

    Конечный пользователь (один из 1000 или около того) передаст одну строку для поиска этих трех столбцов, и запрос должен вернуть все строки, где любой из этих 3 столбцов содержит значение искомой строки (без учета регистра).

    вопросы:

    1. Что является лучшим способом, чтобы создать индекс (ы) таким образом, что запрос будет возвращать данные в наиболее эффективным образом (быстро, минимизируя использование SQL ресурсов сервера)?
    2. Создать индекс для каждого столбца?
    3. Создайте один индекс со всеми тремя столбцами в комплекте?
    4. Включить полнотекстовый поиск по индексам (-ам)?
    5. Какой метод будет использовать весь потенциал того, что может предложить SQL Server 2012?
  • +1

    Я бы *** НЕ *** рекомендуем использовать 'char (n)' или 'nchar (n)' для чего-либо более 5 или, может быть, max. 10 символов. Do ** not ** use 'nchar (20)' или даже хуже - 'nchar (40)' - это огромная ** пустота пространства, и вы никогда не получите достойную производительность с таким дизайном. Для чего-либо более 10 символов, я бы *** всегда *** рекомендуем использовать 'varchar/nvarchar (x)' вместо версий с фиксированной длиной ..... –

    +1

    Последний комментарий: если вы говорите *, где любой из трех столбцов ** содержит ** текст поиска *, то вам нужно либо использовать полнотекстовый поиск, либо вы смотрите на '... ItemNumber LIKE ' % searchterm% ''автоматически будет гарантировать, что ** никакие индексы ** никогда не будут использоваться -> ваша производительность будет ужасной .... –

    +0

    @marc_s благодарит за все полезные комментарии! Я обновил тип данных в моей публикации. Я хочу, чтобы основное внимание в этой статье было посвящено эффективной индексации в этом сценарии. –

    ответ

    0

    Как уже было предложено @marc_s, полнотекстовый поиск является единственным эффективным вариантом.

    Смежные вопросы