Некластеризованный индекс в SQL Server 2008 R2 с включениями против включений - PullRequest
0 голосов
/ 08 января 2012

Запустив советник, он предлагает создать индекс для Path, Value и включить Id.

Path varchar(250)
Value bigint
Id uniqueidentifier
  1. При использовании индекса в запросе будет быстрее иметь Id в индексе, а не как включение?

  2. Будут ли вставки медленнее с включением Id вместо включения в индекс?

Ответы [ 2 ]

2 голосов
/ 08 января 2012

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

2Нет, во всяком случае, это может быть немного быстрее и может вызвать меньшую фрагментацию в индексе как include вместо того, чтобы быть частью индекса, потому что серверу не нужно сортировать включенные столбцы, чтобы поместить их в хранилище индекса.

Запросы выполняются быстрее всего, если в данных индекса хранятся все необходимые столбцы.Включение столбцов сделает именно это: добавьте больше данных в индекс, не индексируя его, так что для получения данных не требуется поиск через PK.

1 голос
/ 08 января 2012
  • 1) Зависит от запроса, если он выглядит как

    select Id 
    from YourTable 
    WHERE Path = x and Value = y and Id =(or>, <, between etc.) z
    

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

  • 2) На самом деле - да, но это может быть незначительным, потому что sql нужно отсортировать AND по идентификатору, но если ваш путь и ценность достаточно универсальны - разница будет очень мала.В IO будет небольшой выигрыш при сохранении идентификатора в секции INCLUDE - потому что нет необходимости сохранять его на страницах без листа

Как вы заметили:

В запросе используются Id, Path и Value.Идентификатор и Путь в ограничении соединения и Значение в где.Идентификатор также является FK на основной таблице.С этой краткой информацией, Как бы вы разработали индекс?

Итак, его лучше включает все строки в индексе, и наилучший порядок столбцов будет зависеть отструктура / индексы другой таблицы в JOIN.

Индекс должен выглядеть как (Value, Id, Path) или (Value, Path, Id) - в зависимости от упомянутого выше.

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