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

Откуда:
Сообщений: 131
подскажите есть ли различие:

create index IX_Name on TableName(field_1) include(field_2,field_3)
или
create index IX_Name on TableName(field_1,field_2,field_3)
11 янв 17, 16:39    [20094626]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Естественно, есть.
11 янв 17, 16:40    [20094634]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
Pupkin
Member

Откуда:
Сообщений: 131
Естественно, есть.

Ага, букафки-то разные...
И как это я сам не догадался?

Спасибо, однако
11 янв 17, 17:07    [20094797]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
Konst_One
Member

Откуда:
Сообщений: 11678
а что вы ждёте от ответов?
у вас проблемы с какими-то запросами к таблице и вы не можете индекс подобрать?
11 янв 17, 17:09    [20094804]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Pupkin
И как это я сам не догадался?

а зачем гадать-то? документацию про индексы откройте...
11 янв 17, 17:09    [20094810]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 119
Pupkin
Естественно, есть.

Ага, букафки-то разные...
И как это я сам не догадался?

Спасибо, однако

Разница есть, и она очень существенная, но в данном случае эту разницу в двух словах реально не объяснить, слишком много разных нюансов, а перепечатывать тут документацию - задача бессмысленная.
11 янв 17, 18:02    [20095045]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
o-o
Guest
Sybex
Разница есть, и она очень существенная, но в данном случае эту разницу в двух словах реально не объяснить, слишком много разных нюансов, а перепечатывать тут документацию - задача бессмысленная.

реально???
ключевые поля индекса присутствуют на всех уровнях индекса, а include-ные только на листовом
11 янв 17, 18:09    [20095068]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Да все же просто: при поиске не только по field_1 с использованием первого индекса field_2 и field_3 никогда не попадут в seek predicate, а при использовании второго при определенных условиях могут попасть.

Сообщение было отредактировано: 11 янв 17, 18:17
11 янв 17, 18:17    [20095107]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Ну и еще при изменении данных в field_2 и field_3 в первом индексе серверу вряд ли придется перемещать данные на другую страницу, во втором же индексе почти наверняка, что приведет к дополнительной фрагментации индекса.
11 янв 17, 23:16    [20096139]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Инклюде весит меньше. Я прав?
11 янв 17, 23:44    [20096207]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Mike_za
Инклюде весит меньше. Я прав?
А если индекс не делать, так вообще уйму места сэкономить можно.
12 янв 17, 00:46    [20096344]     Ответить | Цитировать Сообщить модератору
 Re: create index with include VS create index with fields  [new]
o-o
Guest
IMHO, все далее перечисленное -- прямое следствие факта
o-o
ключевые поля индекса присутствуют на всех уровнях индекса, а include-ные только на листовом

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

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

например, в иклуд чего только не напихаешь (кроме динозавровских типов, разумеется),
а на число полей ключа и на длину ключа есть ограничение, 16 шт. и 900 байт.
хорош был бы индекс, если б в нем можно было вести поиск по 2х гигабайтным блобам
12 янв 17, 01:01    [20096379]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить