Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Pupkin Member Откуда: Сообщений: 120 |
подскажите есть ли различие: 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] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
Естественно, есть. |
11 янв 17, 16:40 [20094634] Ответить | Цитировать Сообщить модератору |
Pupkin Member Откуда: Сообщений: 120 |
Ага, букафки-то разные... И как это я сам не догадался? Спасибо, однако |
||
11 янв 17, 17:07 [20094797] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11562 |
а что вы ждёте от ответов? у вас проблемы с какими-то запросами к таблице и вы не можете индекс подобрать? |
11 янв 17, 17:09 [20094804] Ответить | Цитировать Сообщить модератору |
Knyazev Alexey Member Откуда: Екб -> Мск Сообщений: 10234 Блог |
а зачем гадать-то? документацию про индексы откройте... |
||
11 янв 17, 17:09 [20094810] Ответить | Цитировать Сообщить модератору |
Sybex Member Откуда: Moscow Сообщений: 117 |
Разница есть, и она очень существенная, но в данном случае эту разницу в двух словах реально не объяснить, слишком много разных нюансов, а перепечатывать тут документацию - задача бессмысленная. |
||||
11 янв 17, 18:02 [20095045] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
реально??? ключевые поля индекса присутствуют на всех уровнях индекса, а include-ные только на листовом |
||
11 янв 17, 18:09 [20095068] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
Да все же просто: при поиске не только по field_1 с использованием первого индекса field_2 и field_3 никогда не попадут в seek predicate, а при использовании второго при определенных условиях могут попасть.
Сообщение было отредактировано: 11 янв 17, 18:17 |
11 янв 17, 18:17 [20095107] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
Ну и еще при изменении данных в field_2 и field_3 в первом индексе серверу вряд ли придется перемещать данные на другую страницу, во втором же индексе почти наверняка, что приведет к дополнительной фрагментации индекса. |
11 янв 17, 23:16 [20096139] Ответить | Цитировать Сообщить модератору |
Mike_za Member Откуда: Москва Сообщений: 1176 |
Инклюде весит меньше. Я прав? |
11 янв 17, 23:44 [20096207] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
|
||
12 янв 17, 00:46 [20096344] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
IMHO, все далее перечисленное -- прямое следствие факта
разумеется, поиск в индексе возможен только по ключевым полям, как можно переходить с одного уровня индекса на другой, используя значения инклудного поля, если его просто нет на уровне выше? и сплититься промежуточные уровни не могут при обновлении инклудного поля, раз его там нет. и весить такой индекс будет меньше, потому что снова его нет на промежуточных уровнях. т.е. отличие в двух словах спокойно выражается, а что оно за собой влечет, понятно, если понимаешь, как устроен индекс. например, в иклуд чего только не напихаешь (кроме динозавровских типов, разумеется), а на число полей ключа и на длину ключа есть ограничение, 16 шт. и 900 байт. хорош был бы индекс, если б в нем можно было вести поиск по 2х гигабайтным блобам ![]() |
||
12 янв 17, 01:01 [20096379] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |