linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it worksскоро
  • Уроки
  • База знаний
  • Собеседование
home/postgres/kb/Индексы

kb/indexes

Индексы PostgreSQL: B-tree, GIN, GiST, BRIN, hash

Operator classes как мост от типа к методу доступа, устройство B-tree, hash, GiST/SP-GiST, GIN и BRIN, проектирование составных, покрывающих и частичных индексов, sargability.

  • btree-internalsB-tree: split, дедупликация, INCLUDE

    При переполнении страница делится (split), разделитель поднимается вверх; high key и right link дают параллельный доступ. Дедупликация хранит повтор один раз с posting list; suffix truncation обрезает разделители; INCLUDE покрывает запрос.

  • btree-structureB-tree: структура и спуск

    B-tree - сбалансированное дерево из 8-КБ страниц: meta page указывает на корень, внутренние страницы хранят разделители и downlink, листья - ключ и ctid. Большой fanout даёт 3-4 уровня на миллиарды строк.

  • brin-indexBRIN: block range index

    BRIN хранит сводку min/max на диапазон блоков (по умолчанию 128 страниц), а не запись на строку - индекс крошечный. Работает только при физической корреляции (append-only время); на перемешанных данных бесполезен.

  • gin-indexGIN: инвертированный индекс

    GIN - инвертированный индекс для данных, где у строки много элементов: массивы, JSONB, полнотекст. Хранит «элемент → posting list из ctid». Быстр на чтение, дорог на запись; B-tree бессилен против LIKE '%x%', GIN решает.

  • gist-spgistGiST и SP-GiST

    GiST - каркас деревьев для пересечений, содержания и расстояний (&&, @>, <->): геометрия, диапазоны, exclusion constraint. SP-GiST делит пространство на непересекающиеся части (точки, IP, префиксы). Оба lossy.

  • hash-indexHash-индекс

    Hash поддерживает только оператор равенства и ищет по хешу за одно-два обращения. С PostgreSQL 10 он журналируется (WAL) и безопасен. Не умеет диапазоны, сортировку и многоколоночность - по умолчанию бери B-tree.

  • operator-classesOperator classes и выбор индекса

    Индекс работает не «на колонке», а для конкретных операторов над ней. Связь тип+оператор+метод доступа задаёт operator class. Через каталог pg_amop можно узнать, какой AM поддерживает оператор: @> знают gin и gist, не btree.

  • sargabilitySargability: почему индекс не используется

    Условие sargable, если индекс по колонке к нему применим. Каст или функция над колонкой (created::date, lower(email)) делают его не-sargable - индекс игнорируется, план уходит в Seq Scan. Лечение - переписать или индекс по выражению.

  • index-designПроектирование индексов

    Индекс - отсортированный список. Составной (a,b,c) работает по префиксу слева направо, не по средней колонке. Покрывающие (INCLUDE), частичные (WHERE) и по выражению сужают работу; лишние индексы - налог на запись.

Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки