CREATE INDEX bookings_book_date_part_key
ON bookings ( book_date )
WHERE total_amount > 1000000;
Проведите эксперимент с целью сравнения эффекта от создания частичного ин-
декса с эффектом от создания обычного индекса по столбцу total_amount. Для
этого удалите частичный индекс, а затем создайте обычный индекс.
DROP INDEX bookings_book_date_part_key;
CREATE INDEX bookings_total_amount_key
ON bookings ( total_amount );
Теперь выполните тот же запрос к таблице bookings, который был приведен
в тексте главы:
SELECT *
FROM bookings
WHERE total_amount > 1000000
ORDER BY book_date DESC;
Сравните время выполнения с тем временем, которое было получено при ис-
пользовании частичного индекса. Очень вероятно, что различия времени вы-
полнения запроса будут незначительными.
Самостоятельно ознакомьтесь с разделом документации 11.8 «Частичные ин-
дексы» и попробуйте смоделировать ситуацию в предметной области «Авиапе-
ревозки», когда частичный индекс дал бы больший эффект, чем обычный ин-
декс.
253
Глава 8. Индексы
9. Когда выполняются запросы с поиском по шаблону LIKE или регулярными вы-
ражениями POSIX, тогда для того, чтобы использовался индекс, нужно преду-
смотреть следующее. Если параметры локализации системы отличаются от
стандартной настройки «C» (например, «ru_RU.UTF-8»), тогда при создании
индекса необходимо указать так называемый класс операторов. Существуют
различные классы операторов, например, для столбца типа text это будет
text_pattern_ops.
CREATE INDEX tickets_pass_name
ON tickets ( passenger_name text_pattern_ops );
Индексы со специальными классами операторов пригодны не для всех типов за-
просов. Поэтому, возможно, потребуется создать еще и индекс с классом опера-
торов по умолчанию. Самостоятельно изучите этот вопрос с помощью раздела
документации 11.9 «Семейства и классы операторов».
254
|