Seq Scan / Index Scan
Seq Scan — полное сканирование таблицы. Index Scan — поиск через индекс. EXPLAIN показывает какой метод выбран.
EXPLAIN SELECT * FROM table WHERE col = value;
Объяснение
Пример
-- Seq Scan (без индекса или маленькая таблица) EXPLAIN SELECT * FROM users WHERE country = 'RU'; -- -> Seq Scan on users (cost=0.00..1850.00 rows=12000 ...) -- Index Scan (с индексом) CREATE INDEX ON users (country); EXPLAIN SELECT * FROM users WHERE country = 'RU'; -- -> Index Scan using users_country_idx ...)
Связанные термины
Анекдоты по теме
— Что такое covering index? — Индекс, который содержит все нужные для запроса колонки. — Зачем? — Запрос читает только индекс, не обращаясь к таблице. Index-only scan. — Пример? — CREATE INDEX ON orders (user_id) INCLUDE (total, created_at); SELECT total, created_at FROM orders WHERE user_id = 1; — читает только индекс.
— Что такое pg_trgm? — Расширение для поиска по подстроке с индексом. — Как? — CREATE EXTENSION pg_trgm; CREATE INDEX ON articles USING GIN (title gin_trgm_ops); SELECT * FROM articles WHERE title ILIKE '%postgres%'; — Теперь LIKE '%...%' использует индекс! — Это меняет всё для поиска.
— Почему запрос без индекса похож на поиск книги в библиотеке? — Потому что приходится читать каждую страницу каждой книги.