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

Откуда:
Сообщений: 96
Добрый день.

Исследую вопрос - когда не работает индекс?

Набросал несколько пунктов:

1) искомые данные включены в индекс
2) плотность записей приближается к 1 (низкая селективность запроса)
3) Статистика содержит устаревшие данные.

Подскажите, пож-та, какие могут быть ещё варианты?
23 фев 19, 14:57    [21817832]     Ответить | Цитировать Сообщить модератору
 Re: когда не работает индекс?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30711
Michail A.
Подскажите, пож-та, какие могут быть ещё варианты?
4) Запрещено использовать хинтом.
5) Скан дешевле, чем использовапние индкса (например, данных не больше, чем на страницу)
6) из за использования инедкса другие части запроса становятся слишком дорогими (например, приходится использовать лукапы)
23 фев 19, 15:10    [21817837]     Ответить | Цитировать Сообщить модератору
 Re: когда не работает индекс?  [new]
L_argo
Member

Откуда:
Сообщений: 1132
Michail A.
Подскажите, пож-та, какие могут быть ещё варианты?
Блажь оптимизатора. Ему "показалось", что индекс тут бесполезен.
23 фев 19, 23:01    [21818017]     Ответить | Цитировать Сообщить модератору
 Re: когда не работает индекс?  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 27661
Michail A.,

в пункте 1 у вас НЕ пропущено?
24 фев 19, 12:12    [21818118]     Ответить | Цитировать Сообщить модератору
 Re: когда не работает индекс?  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3024
Michail A.,

дано: индекс по A, B, C

вариант 1:
запрос по D (не в индексе) - индекс не работает

вариант 2:
запрос по B (в индексе)
как думаете, индекс работает? Картинка с другого сайта.

а если два индекса: по A, B и по B, C?
24 фев 19, 12:43    [21818136]     Ответить | Цитировать Сообщить модератору
 Re: когда не работает индекс?  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
Michail A.
Исследую вопрос - когда не работает индекс?

Набросал несколько пунктов:

1) искомые данные включены в индекс
2) плотность записей приближается к 1 (низкая селективность запроса)
3) Статистика содержит устаревшие данные.
Индекс не работает, когда оптимизатор считает его использование невыгодным.

Перечисленные критерии, кроме первого (с учетом поправки skyANA), не являются препяствием для использования индекса.
24 фев 19, 12:53    [21818141]     Ответить | Цитировать Сообщить модератору
 Re: когда не работает индекс?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
invm
Michail A.
Исследую вопрос - когда не работает индекс?

Набросал несколько пунктов:

1) искомые данные включены в индекс
2) плотность записей приближается к 1 (низкая селективность запроса)
3) Статистика содержит устаревшие данные.
Индекс не работает, когда оптимизатор считает его использование невыгодным.

Перечисленные критерии, кроме первого (с учетом поправки skyANA), не являются препяствием для использования индекса.
Да разве? Первое тоже не является препяствием для использования.
CREATE TABLE A(C1 INT IDENTITY(1,1) PRIMARY KEY, C2 int, C3 INT)
CREATE INDEX ix1 ON A(C2)
SELECT C1 FROM A WITH(INDEX(ix1)) WHERE C3 = 1


Все эти пункты имеют смысл только для человека, на самом деле их все можно свести к одному (кроме экзотических случаев), которое собственно и использует сервер:
Из всех планов которые были найдены в рамках отведенных ресурсов и с учетом текущих статистик, план без использования определенного индекса оказался дешевле чем любой другой план с этим индексом.

Экзотическими случаями будут фильтрованные, выключенные и т.д. индексы.
28 фев 19, 04:19    [21821305]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить