Індекси в PostgreSQL: як прискорити повільні запити
Розбираємо типи індексів і вчимося читати план виконання запиту.

Індекси в PostgreSQL: як прискорити повільні запити
З чого почати діагностику
Перш ніж додавати індекс навмання, потрібно зрозуміти, що насправді робить база під час виконання запиту. Команда EXPLAIN ANALYZE показує реальний план виконання з фактичним часом кожного кроку, а не лише припущення планувальника.
EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 42;
Якщо в плані видно Seq Scan по великій таблиці там, де очікувався швидкий точковий пошук, це майже завжди сигнал до додавання індексу на відповідну колонку. Детальніше про суміжний підхід можна прочитати в матеріалі «Шардування бази даних: підходи та підводні камені».

Не всі індекси однакові
B-tree — індекс за замовчуванням і хороший для більшості випадків рівності та діапазонних умов. Для повнотекстового пошуку потрібен GIN-індекс, для геоданих — GiST. Композитний індекс на кількох колонках працює ефективно, лише якщо умови запиту використовують його колонки зліва направо в тому самому порядку, в якому вони оголошені.
Важливо пам'ятати й зворотний бік: кожен індекс уповільнює запис даних і займає місце на диску, тому індекси варто додавати усвідомлено, під конкретні спостережувані повільні запити, а не «про всяк випадок» на кожну колонку таблиці. Ці ідеї перегукуються з темами «NoSQL vs SQL: як обрати правильно» та «Піраміда тестування: баланс unit, integration, e2e».
Схожі матеріали
ACID vs BASE: різні моделі узгодженості
Розбираємо «aCID vs BASE: різні моделі узгодженості» на практичних прикладах і типових помилках при роботі з даними.
Блокування в PostgreSQL: deadlock і як їх уникнути
Розбираємо «блокування в PostgreSQL: deadlock і як їх уникнути» на практичних прикладах і типових помилках при роботі з даними.
CAP-теорема простими словами
Розбираємо «cAP-теорема простими словами» на практичних прикладах і типових помилках при роботі з даними.