Database/MongoDB 2019. 9. 13. 16:09

 

이번 포스팅할 내용은 짧은 내용이다. 아래와 같은 Document가 있다고 생각해보자.

 

{_id:"1234",name:"yeoseong",age:"28",address:"aaa"}

 

위의 도큐먼트에서 인덱스된 필드가 "name"필드라고 가정하자. 위의 도큐먼트를 검색하기 위해서는 아래와 같은 쿼리를 작성할 수 있을 것이다.

 

db.users.find({name:"yeoseong"})

 

위 쿼리의 조건에는 이미 인덱스로 스키마가 등록된 필드이기 때문에 데이터를 풀스캔하는 것이 아니라 인덱스를 서칭해서 결과값을 받아올 것이다. 하지만 조건 값에 일부로만 검색을 하면서 인덱스를 스캔하기 위해서는 어떻게 해야할까?

 

인덱스 프리픽스(Prefix) 스캔 : 문자열 좌측 일치 검색

문자타입의 필드 인덱스가 있고 일부 문자열로 인덱스를 검색하고 싶다면 아래와 같은 조건을 지켜주면 된다.

 

  1. 반드시 문자열의 처음부터 일치하도록 문자열 시작 표시("^")로 정규 표현식이 시작돼야 한다.
  2. 검색 문자열이 "시작 표시(^)" 이외의 정규 표현식을 포함하지 않아야 한다.
  3. 문자열의 마지막을 표현하는 "$" 표시가 없어야 한다.

이 조건들은 SQL에서 자주 사용되는 좌측 일치 LIKE 연산자( " name LIKE 'yeo%' ")와 같은 조건이다. 이렇게 정규 표현식이 나열되면 몽고디비 서버는 레인지 검색을 통해 인덱스를 스캔하게 된다. 즉, 풀 스캔이 아닌 인덱스 스캔을 이용하는 것이다. 이는 문자열만이 아니라 날짜 타입이나 숫자 타입의 필드에도 동일하게 적용된다.

posted by 여성게
: