본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 29. 18:53

프리 필터링(Pre-filtering)과 인 필터링(In-filtering)

요약

벡터 검색 시 WHERE 절의 필터링 조건에 따라 발생하는 프리 필터링(Pre-filtering)과 인 필터링(In-filtering)의 동작 차이를 분석합니다. 필터링 규모와 데이터 분포에 따른 실행 계획의 변화를 실험을 통해 탐색합니다.

핵심 포인트

  • WHERE 절 필터링 규모에 따라 연산 방식이 결정됨
  • 필터링 조건에 따라 프리 필터링과 인 필터링 전환 발생
  • 특정 조건에서 Join-Back 연산이 제거되는 현상 확인
  • 벡터 검색 실행 계획 최적화를 위한 데이터 분포 분석의 중요성

벡터 검색(Vector Search)과 기존의 WHERE 절을 결합하면, 프리 필터링(Pre-filtering) 또는 인 필터링(In-filtering)이라는 새로운 연산(Operation)이 발생합니다.

WHERE 절로 필터링되는 규모에 따라 프리 필터링 또는 인 필터링이 결정되는 것으로 보이므로, 그 경계선을 탐색해 봅니다.

벡터 검색을 사용한 실행 계획(Execution Plan)의 조사 및 분석에 도움이 되기를 바랍니다.

testtab1을 생성하고, 랜덤한 1,024차원 벡터 데이터를 10,000건 vec 열에 저장했습니다.

col1 ~ col9 열에는 문자열 X, Y를 저장하고 있으며, Y의 비율을 조금씩 늘려가고 있습니다.

SQL> info testtab1;
TABLE: TESTTAB1
LAST ANALYZED:2026-06-29 05:41:47.0
...

col3을 WHERE 절에서 사용했을 때, 연산이 프리 필터링(Pre-filtering)에서 인 필터링(In-filtering)으로 변화했습니다.

또한, col8 사용을 마지막으로 Join-Back 연산이 사라진 것도 알 수 있습니다.

SQL> explain plan for select /*+ NO_PARALLEL */ id from testtab1 where col1='Y' order by vector_distance(:qvec, vec) fetch approximate first 10 rows only;
Explained.
SQL> select * from table(dbms_xplan.display);
...

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0