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

2 commits

Author SHA1 Message Date
366d06dcbd docs(sql): миграция 186 — комментарий актуализирован (индекс уже на проде)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m42s
CI / backend-tests (pull_request) Successful in 14m52s
2026-07-04 03:09:44 +05:00
5238ec9977 perf(sql): покрывающий индекс под offer-trend §4.3 (миграция 186)
All checks were successful
CI / changes (pull_request) Successful in 7s
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 1m52s
CI / backend-tests (pull_request) Successful in 14m41s
Профилирование 2026-07-04: offer-trend — самый тяжёлый запрос /analyze
(Nested Loop 141k итераций в objective_lots_history с heap-fetch на
каждую — ~590k буфер-доступов, 6.8с тёплый, >8с холодный → пробивал
8с-гвард ~2/сутки). Покрывающий partial-индекс: ключ = join+порядок
DISTINCT ON, INCLUDE = фильтр+проекция → Index Only Scan.

УЖЕ ПРИМЕНЁН на прод руками CONCURRENTLY (без блокировки writes,
build 134 МБ) + зарегистрирован в _schema_migrations — деплой-apply
этой миграции no-op (IF NOT EXISTS + трекер). Прод-верификация:
Execution 6789мс → 1072мс (6.3×), Index Only Scan подтверждён.
Триггер-писатель (166) и MV (164) остаются на _lot_idx — не затронуты
(разбор потребителей в комментарии миграции).
2026-07-04 03:07:06 +05:00