Даже с индексом СУБД может работать медленно — после поиска всё равно нужно обращаться к таблице за данными.
Covering Index — это индекс, который уже содержит все данные, нужные запросу.Если запрос обращается только к колонкам, включённым в индекс — таблица может не читаться вовсе:
CREATE INDEX idx_orders_status_user
ON orders (status, user_id);
Теперь запрос:
SELECT user_id, status
FROM orders
WHERE status = 'pending';
Выполняется полностью из индекса — минимум I/O, максимум скорости.
В PostgreSQL это видно как
Index Only Scan в плане:EXPLAIN ANALYZE SELECT ...
Работает только если строки помечены
all-visible (visibility map). В MySQL аналог — Using index, в SQL Server — INCLUDE в индексе. 🔥 Не забывайте: больше индексов = больше места и медленнее вставки/обновления.
➡️ SQL Ready | #совет
