커버링 인덱스란 무엇인가요?
관계형/SQL 세계에서는 인덱스를 현명하게 사용하여 쿼리 시간을 절약할 수 있습니다. 쿼리가 닿는 각 열에 인덱스가 있으면 DBMS가 테이블 자체를 들여다보지 않고도 결과를 반환할 수 있습니다.
여기에는 인덱스가 포함됩니다.
카우치베이스에서 커버링 인덱스란 무엇인가요?
Couchbase Server 4.1은 N1QL에 커버링 인덱스를 제공합니다. N1QL 쿼리에 필요한 모든 데이터를 포함하는 인덱스가 있는 경우, Couchbase Server는 해당 인덱스에서 바로 데이터를 반환할 수 있습니다. 이렇게 하면 쿼리 프로세스에서 적어도 하나 이상의 문서 읽기 횟수를 줄일 수 있습니다.
어떻게 작동하나요?
Couchbase에 N1QL 쿼리를 제출하면 다음 단계를 거치게 됩니다:
- 쿼리를 구문 분석하고 쿼리가 수행하는 작업을 분석한 다음 쿼리 계획을 생성합니다.
- 관련 인덱스를 확인합니다.
- 결과가 포함된 문서의 키를 가져온 다음 문서 자체를 가져옵니다.
- 해당 문서에서 관련 데이터를 가져와 결과를 생성합니다.
- 결과를 애플리케이션에 반환합니다.
커버링 인덱스를 사용하면 결과에 대한 모든 데이터가 인덱스 자체에 있으므로 3단계와 4단계를 생략할 수 있습니다.
커버링 인덱스는 어떻게 사용하나요?
쿼리 작성 방법에는 아무런 변화가 없습니다. 대신 인덱스를 설정하는 방법에 관한 것입니다. 단일 인덱스(GSI 또는 보기)는 쿼리가 닿는 모든 JSON 키를 포함해야 합니다.
예시가 있으신가요?
고객 프로필을 저장한다고 가정해 보겠습니다. 다음과 같이 보일 수 있습니다:
{
"이름": "셜록 홈즈",
"주소": "221b 베이커 스트리트",
"도시": "런던",
"국가": "영국",
"뉴스레터": true,
"joinedDate": 1168041600
}
뉴스레터를 구독하는 모든 사람의 이름과 도시를 찾고자 한다면 다음과 같이 N1QL 쿼리를 작성할 수 있습니다:
1 |
선택 이름, 도시 FROM `고객` 어디 뉴스레터=true; |
커버링 인덱스가 없으면 이 쿼리는 다음을 가져옵니다. 이름 그리고 도시 고객 기록에서 해당 문서를 조회하여 검색합니다.
이 쿼리에 대한 커버링 인덱스를 다음과 같이 만들 수 있습니다:
1 |
만들기 INDEX 뉴스레터 구독 켜기 `고객`(이름, 도시, 뉴스레터) 사용 GSI; |
이제 쿼리는 전적으로 색인에서 충족될 수 있습니다.