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

Откуда:
Сообщений: 96
Добрый день, нет возможности проверить, подскажите, пожалуйста, при использовании составного индекса, например из 3 полей, когда идёт запрос по 2 из 3 этих полей, будет ли подхватывается индекс?
25 июл 19, 18:52    [21934722]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4535
Michail A., на все воля оптимизатора...
25 июл 19, 19:04    [21934731]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
Michail A.
Member

Откуда:
Сообщений: 96
buser, понимаю. Но в общем случае - получу index scan ?
25 июл 19, 19:06    [21934733]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4535
Michail A.
buser, понимаю. Но в общем случае - получу index scan ?

В "общем случае" вы получите что угодно от сика по индексу до таблескана :)
25 июл 19, 19:18    [21934738]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33264
Блог
Michail A.,

если эти 2 поля - первые в индексе и выбираемый объем достаточно мал по сравнению со всей таблицей
25 июл 19, 19:31    [21934753]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
Michail A.
Member

Откуда:
Сообщений: 96
То будет index scan?
Критик
Michail A.,

если эти 2 поля - первые в индексе и выбираемый объем достаточно мал по сравнению со всей таблицей
25 июл 19, 19:56    [21934779]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1172
Michail A.,

в большинстве случаев это зависит от предиката запроса и сатистики распределения данных таблицы:

таблица из 4 полей с составным индексом по a,b
create table tbl (a int, b, int, c int, d int, index ix (a, b))



для запроса:
select a, c from tbl where a = 1

-будет индексный поиск + уточнение rid-lookup за колонкой "с" (при относительно малом объеме строк удовлетворяющим предикату "a"=1)

select a, c, from tbl where b = 2

будет скаринрование таблицы, потому что первой ключевой колонки в предикате нет


для запроса
select a from tbl where a > 0 and b = 5 
--будет план будет выбираться на основе селективности полей a и b.


поэтому формулировка "например из 3 полей, когда идёт запрос по 2 из 3 этих полей," несколько неверна потому что вы не уточняете где у вас в запросе присутствуют эти поля, в предикате или в селекте.

так же большую роль играют операторы самого предиката, то есть какая ключевая колонка индекса как в предикате используется:
может быть сравнение на равенство, а может быть на неравеснство. обычно для предикатов на равенство выбирается seek на неравенство scan, но это очень приблизительно, здесь нельзя одназначно утверждать то или иное.
25 июл 19, 19:58    [21934780]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по индексам  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Michail A.,

Порядок полей в индексе имеет значение.
Представьте себе у вас бумажный телефонный справочник где все номера осортированны по имени, потом по отчеству, а потом по фамилии, а теперь вам нужно найти Пупкина Ивановича. Вот если сможете этим справочником воспользоваться то и сервер сможет индексы использовать.
26 июл 19, 23:48    [21935831]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить