Индексы в PostgreSQL
В нашем техническом блоге на www.habrahabr.ru свыше трех десятков статей о СУБД PostgreSQL, написанных сотрудниками компании Postgres Professional для всех тех пользователей, администраторов СУБД, разработчиков приложений и систем, которые хотят расширить свои знания о СУБД PostgreSQL и о базах данных вообще. Недавно руководитель образовательных программ нашей компании Егор Рогов опубликовал пятую часть в цикле статей об "Индексах в PostgreSQL". С момента открытия этого цикла, статьи Егора Рогова были прочитаны более 60 тысяч раз, и весь цикл пользуется неизменным интересом со стороны разработчиков и администраторов СУБД.
Индексы в PostgreSQL — часть 1
В этой серии статей речь пойдет об индексах в PostgreSQL.
Любой вопрос можно рассматривать с разных точек зрения. Мы будем говорить о том, что должно интересовать прикладного разработчика, использующего СУБД: какие индексы существуют, почему в PostgreSQL их так много разных, и как их использовать для ускорения запросов. Пожалуй, тему можно было бы раскрыть и меньшим числом слов, но мы втайне надеемся на любознательного разработчика, которому также интересны и подробности внутреннего устройства, тем более, что понимание таких подробностей позволяет не только прислушиваться к чужому мнению, но и делать собственные выводы.
Индексы в PostgreSQL — часть 2
В первой части мы говорили о том, что метод доступа должен предоставлять информацию о себе. Посмотрим, как устроен этот интерфейс.
Все свойства методов доступа представлены в таблице pg_am (am — access method). Из этой таблицы можно получить и сам список доступных методов: btree, hash, gist, gin, spgist, brin
Хотя к методам доступа можно с полным правом отнести и последовательное сканирование, исторически сложилось так, что оно отсутствует в этом списке.
Индексы в PostgreSQL — часть 3
В первой статье мы рассмотрели механизм индексирования PostgreSQL, во второй — интерфейс методов доступа, и теперь готовы к разговору о конкретных типах индексов. Начнем с хеш-индекса.
Многие современные языки программирования включают хеш-таблицы в качестве базового типа данных. Внешне это выглядит, как обычный массив, но в качестве индекса используется не целое число, а любой тип данных (например, строка). Хеш-индекс в PostgreSQL устроен похожим образом. Как это работает?
Индексы в PostgreSQL — часть 4
Мы уже рассмотрели механизм индексирования PostgreSQL и интерфейс методов доступа, а также один из методов доступа — хеш-индекс. Сейчас поговорим о самом традиционном и используемом индексе — B-дереве. Глава получилась большой, запасайтесь терпением.
Индекс btree, он же B-дерево, пригоден для данных, которые можно отсортировать. Иными словами, для типа данных должны быть определены операторы «больше», «больше или равно», «меньше», «меньше или равно» и «равно». Заметьте, что одни и те же данные иногда можно сортировать разными способами, что возвращает нас к концепции семейства операторов.
Индексы в PostgreSQL — часть 5
GiST — сокращение от «generalized search tree». Это сбалансированное дерево поиска, точно так же, как и рассмотренный ранее b-tree.
В чем же разница? Индекс b-tree жестко привязан к семантике сравнения: поддержка операторов «больше», «меньше», «равно» — это все, на что он способен (зато способен очень хорошо!). Но в современных базах хранятся и такие типы данных, для которых эти операторы просто не имеют смысла: геоданные, текстовые документы, картинки…
На пятой части цикл статей об индексах в СУБД PostgreSQL не заканчивается и уже сейчас Егор Рогов пишет продолжение.