Особенности индексов в PostgreSQL | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
iOS Developer. Professional
-8%
Базы данных
-12%
Agile Project Manager
-5%
Python Developer. Basic
-10%
Java Developer. Professional
-7%
JavaScript Developer. Professional
-3%
MS SQL Server Developer
-8%
Scala-разработчик
-8%
Java Developer. Basic
-8%
Алгоритмы и структуры данных
-9%
Разработчик IoT
-13%
PostgreSQL
-8%
Подготовка к сертификации Oracle Java Programmer (OCAJP) Python Developer. Professional Golang Developer. Professional Разработчик программных роботов (RPA) на базе UiPath и PIX Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов C# ASP.NET Core разработчик VOIP инженер NoSQL Flutter Mobile Developer Супер - интенсив по Kubernetes iOS Developer. Basic Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool"
Инфраструктура
Базы данных
-12%
Network engineer. Basic
-10%
Network engineer
-4%
Инфраструктурная платформа на основе Kubernetes
-6%
Экспресс-курс по управлению миграциями (DBVC)
-10%
Экспресс-курс «Введение в непрерывную поставку на базе Docker»
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Дизайн сетей ЦОД
-13%
PostgreSQL
-8%
DevOps практики и инструменты Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP NoSQL Супер-практикум по использованию и настройке GIT Супер-интенсив «СУБД в высоконагруженных системах» Экспресс-курс «IaC Ansible»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Особенности индексов в PostgreSQL

Postgre_Deep_9.12-5020-f41d10.png

PostgreSQL — система, которая была унаследована от команды Майкла Стоунбрейкера и его учеников и аспирантов в Массачусетском технологическом институте. Многие решения, заложенные в PostgreSQL, опередили время и были очень удачными, что и привело к успеху разработки.

Поговорим об особенностях индексов в PostgreSQL и тем, что их отличает от других РСУБД. Речь пойдёт о стандартных для реляционных СУБД B-tree индексах: 1. Индексы, строго говоря, являются B+ деревом, что даёт возможность прочитать страницы одного уровня, не возвращаясь каждый раз по иерархии к корневому узлу. 2. Индексы в СУБД PostgreSQL не содержат ссылку на кластерный индекс или первичный ключ, как в некоторых других (MySQL, MS SQL Server). Вместо этого, индекс в PostgreSQL содержит указатель на строку таблицы на диске (TID). 3. Ещё одно отличие индексов в PostgreSQL: индекс не содержит информации об актуальной версии, поэтому нет возможности вычитать все данные и вернуть пользователю из индекса, даже если в SELECT выбираются только поля, входящие в индекс. Всё равно необходимо обращение к основной таблице, чтобы получить информацию об актуальных строках и вернуть их в результатах запроса.

Эти особенности важно учитывать при планировании и создании индексов для БД, а также анализировать, насколько индекс используется и используется ли вообще, ведь иногда оптимизатор имеет своё мнение, которое может сильно отличаться от замысла автора запроса и индекса.

Подробнее можно почитать здесь: 1. Цикл Егора Рогова на Хабре. 2. Laurenz Albe Get rid of your unused indexes.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться