8.5 Частичные индексы
PostgreSQL поддерживает очень интересный тип индексов —
частичные индексы
.
Такой индекс формируется не для всех строк таблицы, а лишь для их подмножества.
Это достигается с помощью использования условного выражения, называемого
пре-
дикатом индекса
. Предикат вводится с помощью предложения WHERE.
В качестве иллюстрации создадим частичный индекс для таблицы «Бронирования»
(bookings). Представим, что руководство компании интересуют бронирования на
сумму свыше одного миллиона рублей. Такая выборка выполняется с помощью за-
проса
SELECT * FROM bookings
WHERE total_amount > 1000000
ORDER BY book_date DESC;
book_ref |
book_date
| total_amount
----------+------------------------+--------------
D7E9AA
| 2016-10-06 09:29:00+08 | 1062800.00
EF479E
| 2016-09-30 19:58:00+08 | 1035100.00
3AC131
| 2016-09-28 05:06:00+08 | 1087100.00
3B54BB
| 2016-09-02 21:08:00+08 | 1204500.00
65A6EA
| 2016-08-31 10:28:00+08 | 1065600.00
(5 строк)
Время: 90,996 мс
Хотя сортировка строк производится по датам бронирования в убывающем порядке,
т. е. от более поздних дат к более ранним, тем не менее, включать ключевое слово
DESC в индексное выражение, когда индекс создается только по одному столбцу, нет
необходимости. Это объясняется тем, что PostgreSQL умеет совершать обход индекса
как по возрастанию, так и по убыванию с одинаковой эффективностью.
Обратите внимание, что индексируемый столбец book_date не участвует в форми-
ровании предиката индекса — в предикате используется столбец total_amount. Это
вполне допустимая ситуация.
Достарыңызбен бөлісу: