digital-garden/_inbox/Explain.md
2024-06-13 21:01:37 +03:00

1.9 KiB
Raw Blame History

aliases tags date zero-link parents linked
зрелость/🌱
2024-06-10
00 PostgreSQL
Профилирование запросов в PostgreSQL

Используя ключевое слово EXPLAIN перед запросом, можно получить детальную информацию о том, что делает PostgreSQL под капотом для выполнения запроса, и что это ему стоит.

Пример выполнения

postgres=# explain select * from users where id=20;

QUERY PLAN
-------------------------------------------------------
Index Scan using users_pkey on users (cost=0.15..8.17 rows=1 width=72)
	Index Cond: (id = 20)
(2 rows)

Можно изменить формат вывода. Например, можно вывести все в JSON.

explain(format json) select * from users where id=20;

Explain не выполняет запрос, поэтому результаты будут лишь приблизительными. Можно улучшить качество анализа, если добавить ключевое слово explain analyze, тогда explain также выполнит запрос.

Виды проходов по индексу:

  • Seq Scan - последовательный просмотр таблицы. Худший вариант.
  • Index Scan - просмотр по индексу в таблице
  • Index Only Scan - был использован Покрывающий индекс
  • Bitmap Heap Scan - оптимизация с построением битовых карт для поиска. Сначала строятся битовые карты с использованием нескольких индексов, затем эти битовые карты комбинируются.