
프리 필터링(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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기