В индекс SQL Server включены столбцы - PullRequest
2 голосов
/ 08 июля 2011

Мне нужна помощь, чтобы понять, как создавать индексы. У меня есть таблица, которая выглядит так

  • Id
  • Имя
  • Возраст
  • Местоположение
  • Образование
  • PhoneNumber

Мой запрос выглядит так:

SELECT * 
  FROM table1 
 WHERE name = 'sam'
  1. Как правильно создать индекс для включенных столбцов?
  2. Что делать, если в запросе есть оператор по порядку?

      SELECT * 
        FROM table1 
       WHERE name = 'sam'
    ORDER BY id DESC
    
  3. Что, если в моем операторе where есть 2 параметра?

      SELECT * 
        FROM table1 
       WHERE name = 'sam'
         AND age > 12
    

Ответы [ 4 ]

5 голосов
/ 08 июля 2011

Правильный способ создания индекса с включенными столбцами?Либо через Management Studio / Toad / etc, либо с помощью SQL ( документация ):

CREATE INDEX idx_table_1 ON db.table_1 (name) INCLUDE (id)

Что если запрос имеет ORDER BY

ORDER BYиспользуйте индексы, если оптимизатор посчитает нужным (определяется статистикой таблицы и запросом).Вы должны проверить, лучше ли работает составной индекс или индекс со столбцами INCLUDE, просмотрев стоимость запроса.

Если id является кластеризованным ключом (хотя не всегда первичным ключом), явероятно, не будет включать столбец ...

Что если у меня в операторе where есть 2 параметра?

То же, что и выше - вам нужно проверить, что лучше всего подходит для вашего запроса.Может быть составным или включать в себя или отдельные индексы.

Но имейте в виду, что:

  • настройка для одного запроса не обязательно принесет пользу любому другому запросу
  • индексы замедляют выполнение операторов INSERT / UPDATE / DELETE,и требуют обслуживания
  • Вы можете использовать Помощник по настройке базы данных (DTA) для рекомендаций по индексам, в том числе, когда некоторые из них являются избыточными

Рекомендуемое чтение

Я настоятельно рекомендую прочитать KimberlyТрипп " переломный момент " для лучшего понимания решений и воздействий индекса.

0 голосов
/ 08 июля 2011

Если ID является вашим основным и / или кластеризованным индексным ключом, просто создайте индекс на Name, Age. Это будет охватывать все три запроса.

Включенные поля лучше всего использовать для извлечения значений на уровне строк для столбцов, которых нет в списке фильтров, или для извлечения агрегированных значений, когда отсортированное поле находится в предложении GROUP BY.

0 голосов
/ 08 июля 2011

Поскольку я не знаю, какие именно задачи будет выполнять ваша БД и сколько в ней записей, я бы посоветовал вам взглянуть на статью Основы индекса MSDN. Это позволит вам самим решать, какие индексы создавать.

0 голосов
/ 08 июля 2011

Если вставки редки, создайте столько индексов, сколько хотите.

Для первого запроса создайте индекс для столбца имени.

Идентификационный столбец, я думаю, уже является первичным ключом ...

Создать 2-ой указатель с именем и возрастом.Вы можете сохранить только один индекс: name, ag'e, и он не будет намного медленнее для первого запроса.

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