Глава 55. Определение интерфейса для методов доступа индекса
- Содержание
- 55.1. Записи каталога для индексов
- 55.2. Функции для метода доступа индекса
- 55.3. Сканирование индекса
- 55.4. Замечания о блокировке с индексами
- 55.5. Проверки уникальности в индексе
- 55.6. Функции оценки стоимости индекса
- 55.1. Записи каталога для индексов
В этой главе описывается интерфейс между ядром системы PostgreSQL и методами доступа индексов, которые управляют отдельными типами индексов. Ядро системы не знает об индексах ничего, кроме того, что описано здесь; благодаря этому можно реализовывать абсолютно новые типы индексов, разрабатывая код в виде расширения.
Все индексы PostgreSQL являются, говоря на техническом уровне, вторичными индексами; то есть, они физически отделены от файла таблицы, к которой относятся. Каждый индекс хранится в собственном отдельном физическом отношении и описывается в отдельной записи в каталоге pg_class. Содержимое индекса находится полностью под контролем соответствующего метода доступа. На практике все методы доступа индексов делят индексы на страницы стандартного размера, чтобы для обращения к содержимому индекса можно было задействовать обычный менеджер хранилища и менеджер буферов. (Более того, все существующие методы доступа используют одну структуру страницы, описанную в Разделе 59.6, и одинаковый формат заголовков кортежей индекса; но эти решения методам доступа не навязываются.)
Индекс по сути представляет собой сопоставление некоторых значений ключей данных с идентификаторами кортежей, TID (Tuple Identifier), или версиями строк в основной таблице индекса. TID состоит из номера блока и номера записи в этом блоке (см. Раздел 59.6). Этой информации достаточно, чтобы выбрать определённую версию строки из таблицы. Индексы сами по себе не знают, что в модели MVCC у одной логической строки может быть несколько существующих версий; для индекса каждый кортеж — независимый объект, которому нужна своя запись в индексе. Таким образом, при изменении строки для неё всегда заново создаются новые записи индекса, даже если значения ключа не изменились. (Кортежи HOT представляют собой исключение из этого утверждения; но индексы всё равно не имеют с этим дела.) Записи индексов для мёртвых кортежей высвобождаются (при очистке), когда высвобождаются сами мёртвые кортежи.
Пред. | Начало | След. |
Дополнительные источники информации | Уровень выше | Записи каталога для индексов |