Сканирование индекса назад или сканирование индекса - PullRequest
9 голосов
/ 16 февраля 2011

При поиске и устранении неисправностей на сервере с очень высоким ожиданием ввода / вывода я замечаю, что много запросов поступает от запросов, которые выполняют SELECT max(x) FROM t WHERE y = ?.

Мой индекс btree (x, y).

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

Ответы [ 2 ]

18 голосов
/ 16 февраля 2011

Нет, это не плохо, для запуска первой индексной страницы требуется столько же времени, сколько для начала последней индексной страницы.Вы можете увидеть «разницу» при создании нисходящего индекса, используя DESC .

Индекс (y, x), вероятно, будет лучше для этого запроса.

3 голосов
/ 16 февраля 2011

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

Я полагаю, что SELECT min (x) приведет к нормальному сканированию индекса, не так ли?

...