PostgreSQL - Типы индексов
В этой статье мы рассмотрим типы индексов в PostgreSQL и способы их использования.
PostgreSQL имеет 6 основных типов индексов:
- Индексы B-дерева
- Хеш-индексы
- Индексы GIN
- BRIN
- Индексы GiST
- Индексы SP-GiST
Обсудим их кратко.
Индексы B-дерева
B-дерево - это самобалансирующееся дерево, которое поддерживает отсортированные данные и позволяет выполнять поиск, вставку, удаление и последовательный доступ за логарифмическое время.
Планировщик запросов PostgreSQL рассмотрит возможность использования индекса B-дерева всякий раз, когда столбцы индекса участвуют в сравнении, в котором используется один из следующих операторов:
< <= = >= BETWEEN IN IS NULL IS NOT NULL
Кроме того, планировщик запросов может использовать индекс B-дерева для запросов, которые включают оператор сопоставления с образцом LIKE и ~, если образец является константой и является якорем в начале образца.
Пример:
имя_столбца НРАВИТСЯ 'foo%' column_name НРАВИТСЯ 'bar%' имя_столбца ~ '^ foo'
Кроме того, планировщик запросов рассмотрит возможность использования индексов B-дерева для ILIKE и ~ *, если шаблон начинается с неалфавитного символа, т.е. символов, на которые не влияет преобразование верхнего / нижнего регистра.
Хеш-индексы
Индексы хеширования могут обрабатывать только простое сравнение равенства (=). Это означает, что всякий раз, когда индексированный столбец участвует в сравнении с использованием оператора равенства (=), планировщик запросов рассмотрит возможность использования хеш-индекса.
Чтобы создать хеш-индекс, вы используете оператор CREATE INDEX с типом HASH-индекса в предложении USING следующим образом:
Синтаксис: CREATE INDEX имя_индекса ON имя_таблицы ИСПОЛЬЗУЕТ ХЭШ (индексированный_столбец);
Индексы GIN
GIN расшифровывается как Generalized Inverted Indexes . Обычно его называют GIN.
Индексы GIN наиболее полезны, когда в одном столбце хранится несколько значений, например типы hstore, array, jsonb и range.
BRIN
BRIN расшифровывается как Block Range Indexes . BRIN намного меньше и дешевле в обслуживании по сравнению с индексом B-дерева.
BRIN позволяет использовать индекс для очень большой таблицы, что ранее было бы непрактично при использовании B-дерева без горизонтального разделения. BRIN часто используется в столбце с линейным порядком сортировки, например в столбце даты создания таблицы заказов на продажу.
Индексы GiST
GiST расшифровывается как Generalized Search Tree . Индексы GiST позволяют строить общие древовидные структуры. Индексы GiST полезны при индексировании геометрических типов данных и полнотекстовом поиске.
Индексы SP-GiST
SP-GiST означает GiST с пространственными разделами . SP-GiST поддерживает многораздельные деревья поиска, которые облегчают разработку широкого спектра различных несбалансированных структур данных. Индексы SP-GiST наиболее полезны для данных, которые имеют естественный элемент кластеризации, а также не являются одинаково сбалансированным деревом, например, для ГИС, мультимедиа, телефонной маршрутизации и IP-маршрутизации.