Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Индексы с Include  [new]
Программист 3 поколения
Member

Откуда:
Сообщений: 103
Имеется таблица с полями:
field1, field2, field3...


По этой таблице делаются выборки вида:
select field1, field2 from table where field1=X

и
select field1, field3 from table where field1=X


Как правильно поступить с индексом по полю field1, добавляя остальные поля в include, так:
Index_field1_1 INCLUDE(field2) 
Index_field1_2 INCLUDE(field3) 

или создать один индекс:
Index_field1 INCLUDE(field2, field3)


т.е. создавать два индекса или один?
7 ноя 13, 12:53    [15090360]     Ответить | Цитировать Сообщить модератору
 Re: Индексы с Include  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Как правильно поступить


Об этом Вам расскажут планы выполнения, статистика TIMЕ и IO для разных вариантов индексов.
7 ноя 13, 13:07    [15090481]     Ответить | Цитировать Сообщить модератору
 Re: Индексы с Include  [new]
Программист 3 поколения
Member

Откуда:
Сообщений: 103
pkarklin,

задался вопросом с целью узнать, а как про правилам, если такие есть :)

Тестировал на таблице в 300 тыс. по условию выборка возвращала 1000 записей, в итоге 2 индекса совсем чуть-чуть быстрее чем один.
7 ноя 13, 14:01    [15090871]     Ответить | Цитировать Сообщить модератору
 Re: Индексы с Include  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Надо ещё учитывать то, что на поддержку двух индексов будет уходить больше ресурсов сервера, чем на поддержку одного. Если у вас идёт интенсивная модификация таблицы, то один индекс будет лучше.
7 ноя 13, 14:07    [15090913]     Ответить | Цитировать Сообщить модератору
 Re: Индексы с Include  [new]
Программист 3 поколения
Member

Откуда:
Сообщений: 103
Гость333,

согласен, хорошее замечание, ждём других.

Кстати, статистика по time абсолютно идентична отличается только io на единицу (кол-во логических чтений).

Наверно стоит попробовать на таблице в 1 млн.
7 ноя 13, 14:12    [15090955]     Ответить | Цитировать Сообщить модератору
 Re: Индексы с Include  [new]
Программист 3 поколения
Member

Откуда:
Сообщений: 103
Провёл ещё один тест, более показательный:
Таблица ~5 млн., выборка по условию ~16 тыс.

Размер данных 208 мб.
Размер одного индекса 233 мб.
Размер двух индексов 375 мб.

Выборка с одним индексом:
Число просмотров 1, логических чтений 88
Запрос 1: Время ЦП = 16 мс, затраченное время = 1351 мс.
Запрос 2: Время ЦП = 0 мс, затраченное время = 1083 мс.

Выборка с двумя индексами:
Число просмотров 1, логических чтений 67
Запрос 1:Время ЦП = 0 мс, затраченное время = 120 мс.
Запрос 2: Время ЦП = 0 мс, затраченное время = 558 мс.

Получается для больших таблиц лучше два индекса, для маленьких достаточно одного.
7 ноя 13, 14:27    [15091059]     Ответить | Цитировать Сообщить модератору
 Re: Индексы с Include  [new]
ziktuw
Member

Откуда:
Сообщений: 3552
Если сделать один кластерный индекс по field1, то никаких INCLUDE не надо
7 ноя 13, 15:35    [15091583]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить