Перейти к содержимому

25. Query Optimization: Indexes

Стратегии создания и использования индексов.

Equality → Sort → Range

-- Query:
SELECT * FROM orders
WHERE status = 'active'
AND created_at > '2024-01-01'
ORDER BY created_at DESC;
-- ✅ Правильный порядок:
CREATE INDEX idx_orders_esr ON orders(status, created_at DESC);
-- ❌ Неправильный:
CREATE INDEX idx_orders_wrong ON orders(created_at, status);
-- Запрос:
SELECT id, email, status FROM users WHERE email = '[email protected]';
-- Индекс покрывает все нужные колонки
CREATE INDEX idx_users_covering ON users(email) INCLUDE (id, status);
-- Теперь PostgreSQL читает только индекс, не обращается к таблице!
-- Индексируем только активных пользователей
CREATE INDEX idx_active_users ON users(email) WHERE status = 'active';
  • Маленькие таблицы (< 1000 строк)
  • Колонки с низкой селективностью (пол: М/Ж)
  • Часто изменяемые колонки
  • Редко используемые в WHERE/JOIN

Следующий урок: ACID транзакции