Составной индекс
Индекс по нескольким колонкам. Порядок колонок критически важен.
CREATE INDEX ON table (col1, col2, col3);
Объяснение
Пример
-- Эффективный составной индекс CREATE INDEX ON orders (user_id, status, created_at DESC); -- Использует индекс: SELECT * FROM orders WHERE user_id = 1 AND status = 'paid' ORDER BY created_at DESC; -- НЕ использует (нет первой колонки): SELECT * FROM orders WHERE status = 'paid';
Связанные термины
Анекдоты по теме
— Что такое Bitmap Scan? — Промежуточный шаг. PostgreSQL сначала собирает битмап нужных страниц через индекс, потом читает страницы по порядку. — Зачем? — Когда строк много для Index Scan, но мало для Seq Scan. Лучший I/O паттерн. — Три метода: Seq Scan, Index Scan, Bitmap Index Scan. Оптимизатор выбирает.
Оптимизатор запросов говорит медленному подзапросу: — Ты почему такой тормоз? Подзапрос (ковыряя IN (SELECT ...)): — Я каждую строчку с каждой сравниваю. Зато честно. Оптимизатор: — Используй EXISTS. Подзапрос, помолчав: — Так я не знаю, существую ли я на самом деле после этого...
Начинающий: — Я выучил SQL за неделю! Опытный: — Поздравляю. Ты выучил SELECT, INSERT, UPDATE, DELETE. Осталось лет 5 на JOIN, индексы, транзакции и почему NULL — это зло. Удачи.