벡터 검색, Qdrant 대신 pgvector에 그냥 넣으면 안 될까?
같은 문장 벡터 3만 5천여 개를 PostgreSQL 17의 pgvector와 Qdrant에 넣고 색인 시간과 크기, 정확한 검색 대비 recall@10, 지연을 나란히 잽니다. 벡터 검색에 WHERE와 JOIN을 붙이면 LIMIT보다 적게 나오는 이유와 반복 스캔으로 고치는 방법도 확인합니다.
@Hong2026-10-03조회 191

같은 문장 벡터 3만 5천여 개를 PostgreSQL 17의 pgvector와 Qdrant에 넣고 색인 시간과 크기, 정확한 검색 대비 recall@10, 지연을 나란히 잽니다. 벡터 검색에 WHERE와 JOIN을 붙이면 LIMIT보다 적게 나오는 이유와 반복 스캔으로 고치는 방법도 확인합니다.

인덱스가 있어도 PostgreSQL이 Seq Scan을 고르는 데는 이유가 있습니다. PostgreSQL 17에서 EXPLAIN (ANALYZE, BUFFERS)로 예상 행과 실제 행, 버퍼 수를 읽고, 대부분의 행을 찾는 쿼리와 낡은 통계가 계획을 어떻게 바꾸는지 직접 확인합니다.

PostgreSQL은 UPDATE와 DELETE 때 옛 행 버전을 테이블 안에 그대로 남기고, VACUUM이 나중에 치웁니다. PostgreSQL 17에서 UPDATE로 커진 파일이 VACUUM 뒤에도 줄지 않는 모습과, 오래 열린 트랜잭션 하나가 VACUUM을 막는 과정, 그 트랜잭션을 찾는 방법을 직접 확인합니다.