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

Откуда: From Russia
Сообщений: 146
Есть некластерный индекс, построенный по двум полям, плюс 17 полей у него в included.
Индекс используется очень активно.
Образовался новый запрос, который ищет по тем же двум полям, но в included ему не хватает четырех полей, и поэтому он делает key lookup по кластерному индексу.
Посоветуйте как поступить:
1. Создать новый индекс, заточенный под этот запрос. Он будет точно также построен по тем же двум полям, в инклудед у него получится 18 полей, так как три из тех 17 ему не нужны.
2. Добавить в этот высоконагруженный индекс еще четыре поля: datetime, bit, bit, char(1)
21 сен 12, 20:47    [13204697]     Ответить | Цитировать Сообщить модератору
 Re: Создавать новый индекс или добавить полей в старый?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
Kudep,

А интенсивность обновления большая? Таблица большая? Интенсивность нового запроса, который с 4 полями, большая?

Вот как то из ответа на эти три вопроса и нужно исходить.
21 сен 12, 21:17    [13204759]     Ответить | Цитировать Сообщить модератору
 Re: Создавать новый индекс или добавить полей в старый?  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
Kudep
2. Добавить в этот высоконагруженный индекс еще четыре поля: datetime, bit, bit, char(1)

Исходя из описания этот вариант наиболее приемлемый.
Иначе у вас получится два почти одинаковых индекса различающиеся всего несколькими полями (незначительный % отличия. Я предпологаю, что новые поля имеют сравнимую длину (объем хранимых данных) с уже имеющимися столбцами в индексе).
Больше индексов -> медленей инсерты, нужно больше места на диске, нужно больше места в кэше.
22 сен 12, 01:42    [13205683]     Ответить | Цитировать Сообщить модератору
 Re: Создавать новый индекс или добавить полей в старый?  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
вернее не новые поля, а те 3 из 17 которые ему не нужны.
вот если они тоже не большого размера, то нет надобности еще в одном индексе.

Новые поля относительно небольшие datetime, bit, bit, char(1) в сумме не более 10 байт.
22 сен 12, 01:57    [13205695]     Ответить | Цитировать Сообщить модератору
 Re: Создавать новый индекс или добавить полей в старый?  [new]
Читатель неместный
Guest
удалите все индексы
создайте кластерный по ...хорошему полю
и пяток индексов по одному полю со включением нужных полей
Нет смысла включать в индекс половину полей таблицы
22 сен 12, 09:39    [13205840]     Ответить | Цитировать Сообщить модератору
 Re: Создавать новый индекс или добавить полей в старый?  [new]
Читатель неместный
Guest
автор
ищет по тем же двум полям
это вовсе не означает что будет оптимален индекс по двум полям
22 сен 12, 09:41    [13205842]     Ответить | Цитировать Сообщить модератору
 Re: Создавать новый индекс или добавить полей в старый?  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
а поэкспериментировать с хинтированием на разные индексы анализируя планы выполнения запросов религия не позволяет ... problems ?
22 сен 12, 13:35    [13206227]     Ответить | Цитировать Сообщить модератору
 Re: Создавать новый индекс или добавить полей в старый?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
stavgreengo
а поэкспериментировать с хинтированием на разные индексы анализируя планы выполнения запросов религия не позволяет ... problems ?
Это не имеет особого смысла, планы ТС представляет. Вот посмотреть время и ресурсы ещё можно...

Принимать решение нужно исходя из комбинации 3-х факторов - размер, скорость вставки/обновления, скорость выборки, и от влияния этих факторов на нормльное функционирование системы (может, его и нет, влияния, несмотря на то, что скорость запроса без дополнительного индекса уменьшится в 10 раз?).
22 сен 12, 19:37    [13207157]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить