×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.8.2. Типы индексов

2.8.2.1. B-дерево
2.8.2.2. Хеш
2.8.2.3. GiST
2.8.2.4. SP-GiST
2.8.2.5. GIN
2.8.2.6. BRIN

Digital Q.DataBase предоставляет несколько типов индексов: B-дерево, Hash, GiST, SP-GiST, GIN, BRIN и расширение bloom. Каждый тип индекса использует определенный алгоритм, наиболее подходящий для тех или иных типов индексируемых условий. По умолчанию команда CREATE INDEX создает индексы B-дерево, подходящие для большинства стандартных задач. Другие типы индексов можно выбрать с помощью ключевого слова USING с последующим указанием имени типа индекса. Например, для создания индекса Hash:

CREATE INDEX имя ON таблица USING HASH (столбец);

2.8.2.1. B-дерево #

Индексы типа B-дерево могут обрабатывать запросы на равенство и поиск в диапазоне для данных, которые можно отсортировать в определенном порядке. В частности, Digital Q.DataBase планировщик запросов будет рассматривать возможность использования индекса B-дерево во всех случаях, когда индексированный столбец участвует в операциях сравнения с использованием одного из следующих операторов:

<   <=   =   >=   >

Конструкции, эквивалентные комбинациям этих операторов, такие как BETWEEN и IN, также могут быть реализованы с помощью поиска по индексу B-дерево. Кроме того, условие IS NULL или IS NOT NULL для индексированного столбца может применяться вместе с индексом B-дерево.

Оптимизатор также может использовать индекс B-дерево для запросов, содержащих операторы сопоставления по шаблону LIKE и ~ если шаблон является константой и зафиксирован в начале строки — например, col LIKE 'foo%' или col ~ '^foo', но не col LIKE '%bar'. Однако если в базе данных не используется локаль C, потребуется создать индекс со специальным классом операторов для поддержки индексирования запросов с сопоставлением с образцом; см. Раздел 2.8.10 ниже. Также возможно использовать индексы B-дерево для ILIKE и ~*, но только в том случае, если шаблон начинается с неалфавитных символов, то есть символов, на которые не влияет преобразование регистра.

Индексы B-дерево также могут использоваться для получения данных в отсортированном порядке. Это не всегда быстрее обычного сканирования и последующей сортировки, но часто оказывается эффективным.

2.8.2.2. Хеш #

Хеш-индексы хранят 32-битный хеш-код, вычисляемый на основе значения индексируемого столбца. Следовательно, такие индексы могут обрабатывать только простые сравнения на равенство. Планировщик запросов будет рассматривать использование хеш-индекса во всех случаях, когда индексируемый столбец участвует в сравнении с использованием оператора равенства:

=

2.8.2.3. GiST #

Индексы GiST представляют собой не единый тип индекса, а инфраструктуру, позволяющую реализовывать различные стратегии индексирования. Соответственно, набор операторов, совместимых с индексом GiST, зависит от выбранной стратегии индексирования ( класса операторов). В частности, стандартный дистрибутив Digital Q.DataBase включает классы операторов GiST для нескольких двумерных геометрических типов данных, поддерживающих индексированные запросы с использованием следующих операторов:

<<   &<   &>   >>   <<|   &<|   |&>   |>>   @>   <@   ~=   &&

(См. Раздел 2.6.11 для получения информации о значении этих операторов.) Классы операторов GiST, входящие в стандартный дистрибутив, описаны в Таблица 7.14.1. Множество других классов операторов GiST доступно в contrib коллекции или в виде отдельных проектов. Для получения дополнительной информации см. Раздел 7.14.2.

Индексы GiST также позволяют оптимизировать «поиск ближайших соседей» запросы, такие как

SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;

который находит десять объектов, ближайших к заданной целевой точке. Возможность выполнения таких операций также зависит от используемого конкретного класса операторов. В Таблица 7.14.1, операторы, которые могут быть использованы таким образом, перечислены в столбце «Операторы упорядочивания».

2.8.2.4. SP-GiST #

Индексы SP-GiST, подобно индексам GiST, предоставляют инфраструктуру, поддерживающую различные типы поиска. SP-GiST позволяет реализовывать широкий спектр различных несбалансированных дисковых структур данных, таких как квадродеревья, k-мерные деревья и префиксные деревья (tries). Например, стандартный дистрибутив Digital Q.DataBase включает классы операторов SP-GiST для двумерных точек, которые поддерживают индексированные запросы с использованием следующих операторов:

<<   >>   ~=   <@   <<|   |>>

(См. Раздел 2.6.11 для получения информации о значении этих операторов.) Классы операторов SP-GiST, включенные в стандартный дистрибутив, описаны в Таблица 7.14.2. Для получения дополнительной информации см. Раздел 7.14.3.

Как и GiST, SP-GiST поддерживает «поиск ближайших соседей» поиска. Для классов операторов SP-GiST, поддерживающих упорядочивание по расстоянию, соответствующий оператор указан в «Операторы упорядочивания» столбце в Таблица 7.14.2.

2.8.2.5. GIN #

Индексы GIN — это «инвертированные индексы» которые подходят для значений данных, содержащих несколько составных элементов, например массивов. Инвертированный индекс содержит отдельную запись для каждого составного элемента и позволяет эффективно обрабатывать запросы, проверяющие наличие определенных составных значений.

Подобно GiST и SP-GiST, GIN поддерживает множество различных пользовательских стратегий индексирования, и набор операторов, применимых к индексу GIN, зависит от выбранной стратегии. В качестве примера, стандартный дистрибутив Digital Q.DataBase включает класс операторов GIN для массивов, поддерживающий индексированные запросы с использованием следующих операторов:

<@   @>   =   &&

(См. Раздел 2.6.19 для получения информации о значениях этих операторов). Классы операторов GIN, входящие в стандартный дистрибутив, описаны в Таблица 7.14.3. Множество других классов операторов GIN доступно в contrib коллекции или в виде отдельных проектов. Для получения дополнительной информации см. Раздел 7.14.4.

2.8.2.6. BRIN #

Индексы BRIN (сокращение от Block Range INdexes) хранят сводную информацию о значениях, размещенных в последовательных диапазонах физических блоков таблицы. Таким образом, они наиболее эффективны для столбцов, значения в которых сильно коррелируют с физическим порядком строк таблицы. Как и GiST, SP-GiST и GIN, индексы BRIN позволяют применять различные стратегии индексирования, а конкретный набор операторов, доступных для индекса BRIN, зависит от выбранной стратегии. Для типов данных с линейным порядком сортировки индексированные данные соответствуют минимальным и максимальным значениям столбца в каждом диапазоне блоков. Это обеспечивает поддержку индексированных запросов с использованием следующих операторов:

<   <=   =   >=   >

Классы операторов BRIN, включенные в стандартный дистрибутив, описаны в Таблица 7.14.4. Для получения дополнительной информации см. Раздел 7.14.5.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению