[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-postgresql-kak-ispolzovat-explain-i-explain-analyze-dlya-analiza-zaprosov":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},941,"kak-ispolzovat-explain-i-explain-analyze-dlya-analiza-zaprosov",28,"postgresql","PostgreSQL","🐘","Как использовать EXPLAIN и EXPLAIN ANALYZE для анализа запросов?","`EXPLAIN` показывает план выполнения запроса — как PostgreSQL собирается его выполнять. `EXPLAIN ANALYZE` фактически выполняет запрос и показывает реальное время и количество строк. Это главный инструмент диагностики медленных запросов.\n\n```sql\n-- Только план (запрос НЕ выполняется)\nEXPLAIN\nSELECT * FROM transactions WHERE account_id = 100;\n\n-- План + реальное выполнение\nEXPLAIN ANALYZE\nSELECT * FROM transactions WHERE account_id = 100;\n\n-- Расширенный вывод с буферами\nEXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)\nSELECT * FROM transactions WHERE account_id = 100;\n```\n\n### Пример вывода EXPLAIN ANALYZE\n\n```\nIndex Scan using idx_tx_account on transactions  (cost=0.43..8.45 rows=1 width=64) (actual time=0.021..0.023 rows=1 loops=1)\n  Index Cond: (account_id = 100)\n  Buffers: shared hit=3\nPlanning Time: 0.085 ms\nExecution Time: 0.045 ms\n```\n\n### Ключевые метрики\n\n- `cost=0.43..8.45` — оценка стоимости (начало..итого) в условных единицах\n- `rows=1` — ожидаемое количество строк\n- `actual time=0.021..0.023` — реальное время (мс) первой строки..последней строки\n- `rows=1` (actual) — реальное количество строк\n- `loops=1` — сколько раз узел выполнялся\n- `Buffers: shared hit=3` — прочитано 3 страницы из кеша\n\n### Осторожно с модифицирующими запросами\n\n`EXPLAIN ANALYZE` для `UPDATE`, `DELETE`, `INSERT` **выполняет** операцию! Оборачивайте в транзакцию:\n\n```sql\nBEGIN;\nEXPLAIN ANALYZE UPDATE transactions SET status = 'DONE' WHERE id = 1;\nROLLBACK;\n```\n\n> **На собеседовании:** обязательно упомяните, что EXPLAIN ANALYZE реально выполняет запрос. Для DML-запросов — всегда BEGIN\u002FROLLBACK. Расхождение между estimated и actual rows — признак устаревшей статистики, решается через `ANALYZE table_name`.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Как использовать EXPLAIN и EXPLAIN ANALYZE для анализа запро — Gymterview","`EXPLAIN` показывает план выполнения запроса — как PostgreSQL собирается его выполнять. `EXPLAIN ANALYZE` фактически выполняет запрос и показывает реальное врем","`EXPLAIN` показывает план выполнения запроса — как PostgreSQL собирается его выполнять. `EXPLAIN ANALYZE` фактически вып",[7,13],"`EXPLAIN` показывает план выполнения запроса — как PostgreSQL собирается его выполнять. `EXPLAIN ANALYZE` фактически выполняет запрос и показывает реальное время и количество строк. Это главный инструмент диагностики медленных запросов.",true]