AI VIDEO BRIEFING

마이크로소프트 SQL 벡터 인덱싱 업데이트 정리 — 갱신 가능 인덱스, 반복 필터링, 빨라진 빌드 속도

마이크로소프트가 SQL의 벡터 인덱싱을 세 방향으로 개선했다. 인덱스 형식을 바꿔 구축 속도를 높이고, 데이터 변경이 배경에서 자동 반영되는 갱신 가능 인덱스를 도입했으며, 조건절을 벡터 검색과 함께 적용하는 반복 필터링을 더했다.

SQL 서버 벡터 인덱스는 무엇이 달라졌나 — 갱신 가능한 인덱스와 반복 필터링 영상 대표 이미지

핵심 메시지

  • 마이크로소프트 SQL의 벡터 인덱스는 처음 벡터 거리 계산만 제공하던 단계에서 디스크ANN 기반 인덱스로 발전했고, 이번에 세 가지가 한꺼번에 개선됐다.
  • 인덱스 형식을 바꿔 구축 속도를 크게 끌어올렸으며, 벡터를 압축하는 양자화 기법을 써서 디스크 사용량은 늘지만 검색과 빌드가 빨라졌다.
  • 기존 벡터 인덱스는 갱신이 불가능했지만 이제 삽입·수정·삭제가 배경에서 자동 반영되어, 데이터가 바뀔 때마다 인덱스를 다시 만들 필요가 없다.
  • 조건절을 먼저 무시하고 벡터 검색 후 걸러내던 사후 필터링 대신, 조건과 벡터 검색을 함께 적용하는 반복 필터링이 도입돼 누락되던 결과를 줄인다.
  • 하이퍼스케일의 명명된 복제본에 벡터 검색을 넘겨 기본 복제본의 부하를 덜 수 있으며, 복제본은 별도의 vCore 구성이나 서버리스로도 운영할 수 있다.

쉽게 이해하기

마이크로소프트 개발자 채널의 데이터 엑스포즈드에서 애나 호프만과 밥 워드가 SQL의 벡터 인덱싱이 첫 공개 이후 어떻게 달라졌는지 짚었다. 처음에는 벡터 거리 함수만 제공했고, 이는 사실상 데이터 전체를 훑는 최근접 이웃 탐색이었다. 이후 디스크ANN 기술을 바탕으로 벡터 인덱스를 만들고 벡터 검색 함수를 붙였지만, 마이크로소프트 팀은 출시 시점부터 더 개선할 여지가 있다고 보고 우선 사용자들에게 시험 사용을 맡겼다고 밝혔다.

그 결과가 세 가지 변화다. 첫째는 인덱스 형식 자체를 바꿔 구축 속도를 높인 것이다. 둘째는 갱신 가능한 인덱스다. 예전 인덱스는 한 번 만들면 갱신할 수 없었지만, 이제 벡터 인덱스가 걸린 테이블에 삽입, 수정, 삭제를 해도 배경에서 인덱스가 함께 바뀐다. 밥 워드는 이를 과거 컬럼스토어 기술이 걸어온 길에 비유했다. 셋째는 벡터 검색 방식의 변경으로, 반복 필터링이라 부르는 개념이 새로 들어왔다.

시연은 자바 렌딩이라는 가상의 대출 회사 사례로 진행됐다. 데이터베이스 안에 애저 오픈AI의 텍스트 임베딩 모델을 외부 모델로 정의해 두고, 벡터 데이터 타입 열에 임베딩을 생성해 저장한 뒤 벡터 인덱스를 만든다. 여기서 눈에 띄는 세부 사항은 부동소수점 절반 정밀도인 float16을 쓰면 SQL의 차원 상한인 1998을 넘는 임베딩 모델도 담을 수 있다는 점이다. 검색은 프롬프트를 입력으로 받는 저장 프로시저로 감싸, 먼저 프롬프트의 임베딩을 만든 다음 비교하는 구조로 짰다.

새 문법의 핵심은 TOP 절에 붙는 approximate 표기다. 이 표기가 붙으면 엔진은 반복 필터링 방식으로 벡터 검색을 수행한다. 기존에는 벡터 검색을 먼저 끝내고 결과에 조건절을 적용하는 사후 필터링이어서 원하는 결과가 누락될 수 있었지만, 이제는 조건과 벡터 검색을 함께 적용해 의도한 결과를 돌려준다. 이 기능은 아직 공개 미리 보기 단계이며 정식 출시 시점에는 더 개선될 예정이라고 두 사람은 설명했다.

시연은 갱신 가능 인덱스도 눈으로 확인시켜 준다. 먼저 명명된 복제본에서 자연어 문장으로 검색해 결과의 대출 목적 값을 확인하고, 기본 복제본에 새 행을 넣어 임베딩을 생성한 뒤 같은 질의를 다시 던지자 새로 넣은 항목이 결과에 나타났다. 검색을 명명된 복제본에서 처리한 점도 중요하다. 하이퍼스케일의 명명된 복제본은 읽기 전용 사본이지만 별도의 데이터베이스 이름으로 접속할 수 있고 vCore 구성을 다르게 가져가거나 서버리스로 둘 수도 있어, 쓰기는 기본 복제본에서 처리하면서 벡터 검색 부하만 떼어낼 수 있다.

주요 인사이트

  • 갱신 불가능한 인덱스는 검색 품질 문제가 아니라 운영 문제였다. 데이터가 조금 바뀔 때마다 인덱스를 다시 만들어야 한다면 실시간성이 필요한 서비스에서는 사실상 쓰기 어렵다. 갱신 가능 전환은 벡터 검색을 실험에서 운영 단계로 옮기는 조건에 가깝다.
  • 사후 필터링과 반복 필터링의 차이는 검색 결과의 정확성에 직결된다. 벡터로 상위 N개를 먼저 고른 뒤 조건을 걸면, 조건에 맞으면서 유사도가 N위 밖이던 항목은 영영 나오지 않는다.
  • 양자화는 압축이지만 디스크는 오히려 더 쓰게 된다는 설명이 흥미롭다. 저장 공간을 내주고 속도를 사는 교환이며, 벡터 검색에서 병목이 어디인지 보여주는 대목이다.
  • 읽기 전용 복제본으로 벡터 검색을 분리하는 구성은 검색 트래픽과 트랜잭션 부하의 성격이 다르다는 점을 활용한다. 복제본만 서버리스나 다른 규모로 두는 유연성이 여기서 나온다.
  • float16으로 차원 상한을 우회한다는 요령은, 임베딩 모델의 출력 차원이 데이터베이스의 제약보다 빠르게 커지고 있는 현실을 보여준다.

자주 묻는 질문

벡터 인덱스가 갱신 가능해졌다는 것은 무슨 뜻인가요?

벡터 인덱스가 걸린 테이블에 행을 넣거나 고치거나 지우면, 배경에서 인덱스가 자동으로 함께 갱신된다는 뜻입니다. 데이터가 바뀔 때마다 인덱스를 다시 구축할 필요가 없어집니다.

반복 필터링은 기존 방식과 무엇이 다른가요?

기존에는 벡터 검색을 먼저 수행하고 그 결과에 조건절을 적용하는 사후 필터링이어서 원하는 결과가 빠질 수 있었습니다. 반복 필터링은 조건절과 벡터 검색을 함께 적용해 의도에 맞는 결과를 돌려줍니다. 질의에서는 TOP 절에 approximate 표기를 붙여 사용합니다.

임베딩 차원이 SQL의 상한보다 큰 모델도 쓸 수 있나요?

절반 정밀도인 float16을 사용하면 차원 상한인 1998을 넘는 임베딩도 저장할 수 있다고 설명합니다.

벡터 검색 부하를 기본 데이터베이스에서 분리할 수 있나요?

하이퍼스케일의 명명된 복제본을 쓰면 됩니다. 읽기 전용 사본이지만 별도의 데이터베이스 이름으로 접속하고 vCore 구성을 다르게 하거나 서버리스로 둘 수 있어, 쓰기는 기본 복제본에서 처리하고 검색만 복제본에서 수행할 수 있습니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식