linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it worksскоро
  • Уроки
  • База знаний
  • Собеседование
home/postgres/kb/Планировщик и оптимизатор/startup-total-cost

kb/planner ── Планировщик и оптимизатор ── intermediate

Startup cost против total cost

У каждого узла два числа: startup cost (до первой строки) и total cost (до всех). У Seq Scan startup ~0, у Sort - большой. LIMIT смещает выбор в пользу плана с маленьким startup.

view as markdownaka: startup-cost, total-cost

В плане стоимость узла записана как cost=startup..total.

Два числа

  • startup cost - работа до выдачи первой строки;
  • total cost - работа до выдачи всех строк.

У Seq Scan startup близок к нулю: первую строку отдают сразу. У Sort startup большой - чтобы отдать первую строку, надо отсортировать всё:

Sort  (cost=39.27..40.52 rows=500 ...)   ← startup 39.27
  ->  Seq Scan on tickets  (cost=0.00..9.00 ...)

Почему это важно: LIMIT

Без LIMIT планы сравниваются по total cost. С LIMIT 10 важна стоимость первых десяти строк, и план с маленьким startup выигрывает. ORDER BY x LIMIT 10 с индексом по x уходит в Index Scan: индекс отдаёт строки уже отсортированными, startup мал. Seq Scan + Sort обязан обработать всё до первой строки - его startup огромен.

Поэтому LIMIT - не пост-обработка готового результата, а вход в стоимостную модель, способный сменить сам план. Откуда берутся сами числа - в cost-model.

§ команды

bash
EXPLAIN SELECT * FROM t ORDER BY x;

Увидеть большой startup у Sort

bash
EXPLAIN SELECT * FROM t ORDER BY x LIMIT 10;

С LIMIT план может уйти в Index Scan ради малого startup

§ см. также

  • cost-modelСтоимостная модельСтоимость - условные единицы, где последовательное чтение страницы = 1.0. Seq Scan стоит relpages × seq_page_cost + reltuples × cpu_tuple_cost. Планировщик выбирает план с минимальной оценкой, а не «правильный».
  • access-methodsМетоды доступа: Seq, Index, Bitmap, Index-OnlyЧетыре способа достать строки: Seq Scan (всё подряд), Index Scan (мало строк, random I/O), Bitmap Heap Scan (средняя доля, страницы пачкой), Index-Only Scan (данные из индекса, если visibility map подтверждает).
  • planner-statisticsСтатистика планировщика: pg_statsПланировщик не читает данные при планировании - берёт сводку из pg_statistic (view pg_stats), собранную ANALYZE: null_frac, n_distinct, MCV с частотами и гистограмму равной площади. Устаревшая сводка - частый корень плохих планов.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки