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 ...)
Связанные термины
Анекдоты по теме
— Что общего у поиска иголки в стоге сена и SELECT без индекса? — И то и другое занимает вечность. Только в базе стог сена — это миллион строк.
Разработчик: добавь индекс на email в таблице users (50M строк). DBA: CREATE INDEX CONCURRENTLY ON users (email); Разработчик: почему CONCURRENTLY? DBA: обычный CREATE INDEX берёт ACCESS SHARE LOCK — блокирует запись на всё время. CONCURRENTLY создаёт индекс в фоне без блокировки таблицы. Разработчик: а downside? DBA: дольше и не в транзакции.
— Есть ли NULL в индексе? — В PostgreSQL — нет. B-tree индекс по умолчанию не индексирует NULL. — А если WHERE col IS NULL? — Seq Scan. Если нужен индекс на NULL — используй partial index: WHERE col IS NULL.