15
Практика+
1. В таблице хранятся даты событий. Какой индекс позволит
ускорить запросы вида «найти определенное количество
событий, наиболее близких по времени к указанной дате»?
Проверьте.
2. Расширение pg_trgm добавляет функции и операторы для
работы с триграммами, а также индексную поддержку.
В частности, GiST-индекс ускоряет поиск по условиям вида
столбец LIKE '%что-то%'
Проверьте работу индекса. Найдите в системном каталоге
все доступные операторы для класса gist_trgm_ops.
Что в случае триграмм может служить общим предикатом,
которому удовлетворяют все данные поддерева?
2. Триграммы — это последовательности из трех символов, на которые
разбивается строка. Например, из «что-то» получаются следующие
триграммы: « ч», « чт», «что», «то-», «о-т», «-то», «то », «о ».
Триграммы позволяют определять «похожесть» строк: если и в одной,
и в другой много одинаковых триграмм, то и сами строки похожи.
Поиск по LIKE, где в начале шаблона находятся обычные символы
('что-то%') ускоряется и простым индексом на основе B-дерева.
Но такой индекс бесполезен, если шаблон начинается с %.
Для проверки можно воспользоваться таблицей с данными почтовой
рассылки pgsql-hackers. Чтобы восстановить эту таблицу в базу данных
ext_opclasses, выполните команду:
student$ zcat ~/mail_messages.sql.gz | psql -d ext_opclasses
В качестве запроса можно использовать следующий:
SELECT count(*)
FROM mail_messages
WHERE subject ILIKE '%magic%';