2017-10-19 3 views
0

나는 카우치베이스 주식회사의 문서 이러한 유형이 있습니다카우치베이스 주식회사 인덱스

{ 
    delete: true, 
    entity: { 
     id: "1aec5ee9-bb4b-494d-9cfd-b7d890abad76", 
     name: 'Bob' 
    } 
    _class: "com.company.package.A" 
} 

{ 
    delete: false, 
    entity: { 
     id: "5996c870-3b00-4c6a-a569-52b0c9e8adc9", 
     city: 'London' 
    } 
    _class: "com.company.package.B" 
} 

이러한 쿼리에 대한 더 나은 것 무엇 인덱스 :

select * from bucket where _class = "com.company.package.A" and delete=true and entity.name = "Bob" 
select * from bucket where _class = "com.company.package.B" and delete=false and entity.city = "London" 
  1. GSI _class
  2. GSI에 대한 삭제
  3. 에 대한
  4. entity.name의 GSI (_class = "com.company.package.A"일 경우)
  5. entity.city, _class = "com.company.package.B"

OR

  1. GSI 필드 {entity.name가 _class가 삭제}의 그룹에 대해, _class위한 363,210
  2. GSI = "com.company.package.A"
  3. _class = "com.company.package.B"인 경우 필드 그룹 {entity.city, _class, deleted}에 대한 GSI
  4. 별도의 GSI 색인을 생성하지 마십시오. _class 및 전혀 삭제됨

답변

0

글로벌 보조 인덱스를 다루는 것은 데이터 서비스에서 문서를 검색 할 필요가 없으므로 최고의 성능을 제공합니다.

쿼리 할 때 명시적인 필드 이름을 사용하십시오. select *을 사용하는 경우 Couchbase는 인덱스에서 제외 된 다른 필드를 보려면 데이터 서비스로 이동해야합니다. 당신은 당신이 덮여 필드의 세트에서 제거 할 수 있습니다 entity.id이 필요하지 않은 경우

CREATE INDEX covering_index1 ON default(`delete`, entity.id, entity.name) WHERE _class = "com.company.package.A"; 
CREATE INDEX covering_index2 ON default(`delete`, entity.id, entity.city) WHERE _class = "com.company.package.B"; 

: 귀하의 경우

는 두 개의 인덱스를 원할 것입니다.

delete은 예약어이기 때문에 `이어야합니다.