EXPLAIN (ANALYZE, BUFFERS) on a representative query. The plan should show Index Scan using ... hnsw-... not Seq Scan. If you see Seq Scan on a million-row table, the planner fell back — usually because the operator doesn’t match the index op-class, or the planner picked a sequential scan as “cheaper” for a tiny query.
SET hnsw.ef_search=100; EXPLAIN ANALYZE SELECT … ORDER BY embedding <=> :q LIMIT 10.
Look for “Index Scan … hnsw …” — if you see “Seq Scan” your index is silently ignored.
Pair the index op-class with the query operator: cosine_op with <=>, l2_op with <->.
Query -> planner -> {Seq Scan} OR {Index Scan using hnsw}
Always assert the right one before shipping
Trust EXPLAIN ANALYZE, not “I created the index.” Use it in CI.