부분 인덱스
부분 인덱스를 사용하여 데이터베이스 문서의 하위 집합을 사용하여 인덱스를 만들려면 부분 인덱스를 사용합니다. 올바르게 사용하면 인덱스의 전체 크기를 줄여 쿼리 속도를 높이고 데이터 저장 비용을 절감하는 강력한 최적화 기법입니다.
부분 인덱스 작성
IBM Cloudant 조회에서는 partial_filter_selector 필드를 사용하여 부분 인덱스를 지원합니다. partial_filter_selector 에는 인덱스 시간에 실행되는 표준 IBM Cloudant 쿼리가 포함되어 있습니다. 선택기와 일치하지 않는 문서는 색인에 추가되지 않습니다.
다음과 같이 조회 예제를 참조하십시오.
{
"selector": {
"status": {
"$ne": "archived"
},
"type": "user"
}
}
부분 인덱스가 없을 경우 이 조회에는 type 상태가 아닌 user:archived의 모든 문서를 찾기 위해 전체 인덱스 스캔이 필요합니다. 이러한 상황은 일반 인덱스를 사용하여 인접 행을 일치시킬 수 있기 때문에 발생하며 $ne 연산자에서는 이를 보장할 수 없습니다.
응답 시간을 개선하려면 문서를 제외하는 색인을 만들 수 있습니다 를 사용하여 색인 생성 시 status: { $ne: archived }
partial_filter_selector 에 표시된 것과 같습니다:
POST /db/_index HTTP/1.1
Content-Type: application/json
Content-Length: 144
Host: localhost:5984
{
"index": {
"partial_filter_selector": {
"status": {
"$ne": "archived"
}
},
"fields": ["type"]
},
"ddoc" : "type-not-archived",
"type" : "json"
}
부분 인덱스는 명시하지 않는 한 쿼리 플래너에서 사용되지 않습니다
use_index 로 지정하지 않는 한 부분 인덱스는 쿼리 플래너에서 사용되지 않으므로 원래 쿼리를 수정해야 합니다:
{
"selector": {
"status": {
"$ne": "archived"
},
"type": "user"
},
"use_index": "type-not-archived"
}
기술적으로는 조회 선택기의 status 필드에 필터를 포함시킬 필요가 없습니다. 부분 인덱스는 이 값이 항상 true가 되도록 해줍니다. 하지만 필터를 포함시키는 경우 선택기의 의도가 더 명확해집니다. 또한 나중에 더 쉽게 조회 계획을 개선할 수 있도록 해줍니다(예: 부분 인덱스 자동 선택).