|
All checks were successful
CI / frontend-tests (pull_request) Has been skipped
CI / changes (push) Successful in 7s
CI / frontend-tests (push) Has been skipped
CI / changes (pull_request) Successful in 7s
CI / openapi-codegen-check (push) Successful in 1m57s
CI / openapi-codegen-check (pull_request) Successful in 1m50s
CI / backend-tests (push) Successful in 8m53s
CI / backend-tests (pull_request) Successful in 8m51s
obj_pricing (OBJ-3 #1332) агрегировал objective_lots (2.1ГБ) по всем ~286 маппингам через GROUP BY domrf_obj_id, но LEFT JOIN потреблял только ~43 ближних (3км) obj_id — далёкие медианы считались и выбрасывались. Добавлен nearby_obj CTE (3км-множество считается раз), obj_pricing scoped через WHERE cm.domrf_obj_id IN (SELECT obj_id FROM nearby_obj), финальный SELECT идёт FROM nearby_obj → scope == потребляемое множество. Планировщик теперь bitmap index scan вместо full parallel seq scan. Прод EXPLAIN (центр ЕКБ): ~700мс→~290мс, objective_lots buffer reads 212658→20561 (~10x). Байт-идентично: per-obj_id агрегаты независимы, 0 расхождений на 43 ближних группах. Цена/fallback не тронуты (scope-only). Регрешн-гард против отката к full-table агрегации. Refs #70 |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| test_admin_cadastre.py | ||
| test_admin_ekburg_permits.py | ||
| test_admin_jobs_settings.py | ||
| test_admin_scrape_freshness.py | ||
| test_analyze_competitors_status.py | ||
| test_analyze_inline_weights.py | ||
| test_analyze_market_price.py | ||
| test_analyze_parcel_meta.py | ||
| test_analyze_recent_permits.py | ||
| test_chat.py | ||
| test_custom_pois.py | ||
| test_insights.py | ||
| test_locations.py | ||
| test_own_projects.py | ||
| test_parcel_best_layouts.py | ||
| test_parcel_by_bbox.py | ||
| test_parcel_competitors.py | ||
| test_parcel_connection_points.py | ||
| test_parcels_forecast.py | ||
| test_run_history_and_response_contract.py | ||