perf(sql): покрывающий индекс под offer-trend §4.3 — 6.8с → 1.1с (миграция 186) #2331

Merged
bot-backend merged 2 commits from feat/offer-trend-covering-index into main 2026-07-03 22:26:30 +00:00
Showing only changes of commit 366d06dcbd - Show all commits

View file

@ -50,12 +50,12 @@
-- бы годиться для будущих is-sold-agnostic чтений, а выигрыш поверх price-partial -- бы годиться для будущих is-sold-agnostic чтений, а выигрыш поверх price-partial
-- мал — Index-Only и так снимает heap-походы. -- мал — Index-Only и так снимает heap-походы.
-- --
-- ОЖИДАЕМЫЙ ЭФФЕКТ (гипотеза, проверяется post-deploy — индекс на проде ещё не -- ЭФФЕКТ (прод-верифицирован 2026-07-04: индекс УЖЕ создан руками CONCURRENTLY
-- создан): внутренний `Index Scan using objective_lots_history_lot_idx` + heap -- до мержа + зарегистрирован в _schema_migrations, деплой = no-op): внутренний `Index Scan using objective_lots_history_lot_idx` + heap
-- fetch → `Index Only Scan using objective_lots_history_offer_trend_idx`, -- fetch → `Index Only Scan using objective_lots_history_offer_trend_idx`,
-- Heap Fetches ≈ 0, Buffers на history-узле падают с ~590k до ~десятков k, -- Heap Fetches ≈ 0, Buffers на history-узле падают с ~590k до ~десятков k,
-- Execution с ~6.8 s до субсекунды на этом же центре. Post-deploy verify — -- Execution 6789 мс → 1072 мс (6.3×) на том же центре — подтверждено живым
-- команда в ответе воркера (EXPLAIN ANALYZE того же `hist`). -- EXPLAIN ANALYZE после создания.
-- --
-- ── РАЗМЕР / ВРЕМЯ BUILD ───────────────────────────────────────────────────── -- ── РАЗМЕР / ВРЕМЯ BUILD ─────────────────────────────────────────────────────
-- Таблица objective_lots_history: 2 245 510 строк, 538 MB total (282 MB heap, -- Таблица objective_lots_history: 2 245 510 строк, 538 MB total (282 MB heap,