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 «Частичные ин-
дексы» и попробуйте смоделировать ситуацию в предметной области «Авиапе-
ревозки», когда частичный индекс дал бы больший эффект, чем обычный ин-
декс.
9. Когда выполняются запросы с поиском по шаблону LIKE или регулярными выра-
жениями POSIX, тогда для того, чтобы использовался индекс, нужно предусмот-
реть следующее. Если параметры локализации системы отличаются от стан-
дартной настройки «C» (например, «ru_RU.UTF-8»), тогда при создании индекса
необходимо указать так называемый класс операторов. Существуют различные
классы, например, для столбца типа text это будет text_pattern_ops.
197
CREATE INDEX tickets_pass_name
ON tickets ( passenger_name text_pattern_ops );
Индексы со специальными классами операторов пригодны не для всех типов за-
просов. Поэтому, возможно, потребуется создать еще и индекс с классом опера-
торов по умолчанию. Самостоятельно изучите этот вопрос с помощью раздела
документации 11.9 «Семейства и классы операторов».
198
|