hnsw ("abstractEmbedding" vector_cosine_ops); -- 検索:距離だけで ORDER BY すると索引が効く SELECT id, 1 - ("abstractEmbedding" <=> $1) AS similarity FROM "VerifiedPaper" ORDER BY "abstractEmbedding" <=> $1 LIMIT 20; ビルド実測:8万行で 1分36秒・618MB(ローカル)。通常の CREATE INDEX はその間 テーブルを書込ロック 効くのは「距離だけのORDER BY」。年順など複合ソートは対象外
CREATE INDEX CONCURRENTLY を書く C → 8万行で数分の書込ロック。本番はマイグレーションが起動時に走るので、起動が止まりHEALTHCHECK事故に → トランザクション内では使えない。Prismaのマイグレーションはトランザクションで走る IF NOT EXISTS で黙らせる → CONCURRENTLYが途中で失敗すると INVALID な索引が残り、IF NOT EXISTS はそれを「ある」と見なして黙る