-- 召回 selectHits 主路径索引:sig 信号 + gap resolvedTeeth 子查询均按 (patient_id, type, status) 过滤。
-- 原仅 (patient_id, status) → type 内存过滤,facts/患者多时 heap fetch 超线性膨胀(全量重算 50min 主因)。
-- IF NOT EXISTS:prod 可先手动 CREATE INDEX CONCURRENTLY 预建(免锁表),再 deploy 时本句即 no-op。
CREATE INDEX IF NOT EXISTS "patient_facts_patient_id_type_status_idx"
  ON "patient_facts"("patient_id", "type", "status");
