Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по индексам / 8 сообщений из 8, страница 1 из 1
25.07.2019, 18:52
    #39841587
Michail A.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по индексам
Добрый день, нет возможности проверить, подскажите, пожалуйста, при использовании составного индекса, например из 3 полей, когда идёт запрос по 2 из 3 этих полей, будет ли подхватывается индекс?
...
Рейтинг: 0 / 0
25.07.2019, 19:04
    #39841591
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по индексам
Michail A., на все воля оптимизатора...
...
Рейтинг: 0 / 0
25.07.2019, 19:06
    #39841593
Michail A.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по индексам
buser, понимаю. Но в общем случае - получу index scan ?
...
Рейтинг: 0 / 0
25.07.2019, 19:18
    #39841599
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по индексам
Michail A.buser, понимаю. Но в общем случае - получу index scan ?
В "общем случае" вы получите что угодно от сика по индексу до таблескана :)
...
Рейтинг: 0 / 0
25.07.2019, 19:31
    #39841611
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по индексам
Michail A.,

если эти 2 поля - первые в индексе и выбираемый объем достаточно мал по сравнению со всей таблицей
...
Рейтинг: 0 / 0
25.07.2019, 19:56
    #39841622
Michail A.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по индексам
То будет index scan?КритикMichail A.,

если эти 2 поля - первые в индексе и выбираемый объем достаточно мал по сравнению со всей таблицей
...
Рейтинг: 0 / 0
25.07.2019, 19:58
    #39841623
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по индексам
Michail A.,

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

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




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


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

Код: sql
1.
select a, c, from tbl where b = 2


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


для запроса
Код: sql
1.
select a from tbl where a > 0 and b = 5 

--будет план будет выбираться на основе селективности полей a и b.


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

так же большую роль играют операторы самого предиката, то есть какая ключевая колонка индекса как в предикате используется:
может быть сравнение на равенство, а может быть на неравеснство. обычно для предикатов на равенство выбирается seek на неравенство scan, но это очень приблизительно, здесь нельзя одназначно утверждать то или иное.
...
Рейтинг: 0 / 0
26.07.2019, 23:48
    #39842125
Mind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по индексам
Michail A.,

Порядок полей в индексе имеет значение.
Представьте себе у вас бумажный телефонный справочник где все номера осортированны по имени, потом по отчеству, а потом по фамилии, а теперь вам нужно найти Пупкина Ивановича. Вот если сможете этим справочником воспользоваться то и сервер сможет индексы использовать.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по индексам / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]