Загрузка…
Загрузка…
Индекс в СУБД — это вспомогательная структура данных (чаще всего типа B-дерева), ускоряющая поиск строк по определенным полям без полного сканирования таблицы. Фактически индекс хранит упорядоченное представление ключей и ссылок на строки.
Запрос с WHERE/JOIN/ORDER BY может использовать индекс для быстрого поиска
соответствующий диапазон клавиш.
Вместо Seq Scan (полное чтение таблицы) оптимизатор выбирает Index Scan/Bitmap Scan, если это полезно.
Индексы также могут поддерживать уникальность (UNIQUE).
Каждый индекс занимает место на диске.
INSERT/UPDATE/DELETE станут дороже, потому что нужно обновить
indexes.
Избыточные индексы замедляют запись и затрудняют обслуживание.
Отправляйте реальные запросы, а не «на всякий случай».
Индексные поля, которые часто находятся в:
⟦С0⟧
⟦С0⟧
⟦С0⟧
GROUP BY (при необходимости)
Посмотрите EXPLAIN (ANALYZE, BUFFERS) и убедитесь, что индекс действительно равен
б/у и выгодно.
Регулярно проверяйте неэффективные/неиспользуемые индексы.
Определите самые медленные запросы.
Добавьте минимально необходимые индексы.
Проверьте план до/после.
Измерьте влияние на баланс чтения/записи при реальной нагрузке.
Индекс — это инструмент, позволяющий ускорить чтение за счет более дорогой записи. Правильный выбор индексов всегда определяется запросами: только для определенных шаблонов доступа и только после проверки плана и производительности.
-- Перевіряємо план до індексу
EXPLAIN (ANALYZE, BUFFERS)
SELECT *
FROM orders
WHERE tenant_id = 42
AND created_at >= now() - interval '7 days'
ORDER BY created_at DESC
LIMIT 100;
-- Додаємо індекс під реальний патерн запиту
CREATE INDEX CONCURRENTLY idx_orders_tenant_created_at
ON orders (tenant_id, created_at DESC);Индекс в СУБД — это вспомогательная структура данных (чаще всего типа B-дерева), ускоряющая поиск строк по определенным полям без полного сканирования таблицы.
