-- 159_houses_fias_idx.sql -- Индекс под Tier 0.5 fias_exact матчинга домов (feat/tradein-fias-tier-matching). -- -- WHY: -- houses.house_fias_id (ГАР OBJECTGUID, migration 070) теперь заполнен у ~5.1k -- из 11.8k домов (DaData backfill 2026-07-02). Матчинг-каскад получил новый -- tier `fias_exact` (services/matching/houses.py) с предикатом -- `lower(house_fias_id) = lower(:fias)`. Без функционального индекса каждый -- estimate/scrape делал бы seq-scan по houses. -- -- SCOPE: -- Только создание partial functional index. Данные не трогаются. -- -- IDEMPOTENCY / SAFETY: -- - BEGIN/COMMIT одной транзакцией. -- - CREATE INDEX IF NOT EXISTS → повторный прогон no-op (auto-apply strict). -- - Partial (WHERE house_fias_id IS NOT NULL) — не индексируем ~6.7k NULL-строк. -- - lower(...) выражение соответствует case-insensitive предикату матчера. BEGIN; CREATE INDEX IF NOT EXISTS houses_fias_lower_idx ON houses (lower(house_fias_id)) WHERE house_fias_id IS NOT NULL; COMMIT;