2017-10-19 5 views
0

私はCouchbaseの中で、文書のこれらのタイプを持っている:Couchbaseのインデックス

{ 
    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. エンティティ名のGSI(_class = "com.company.package.A"の場合)
  5. entity.cityためのGSI、_class = "com.company.package.B"

OR

  1. GSIフィールド{entity.name、_class、削除}の基を表し、場合_class = "com.company.package.A"
  2. _class = "com.company.package.B"の場合、フィールドグループ{entity.city、_class、deleted}のGSI
  3. 別の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"; 

:あなたのケースでは

は、次の2つのインデックスをお勧めします。

予約語であるため、delete`にある必要があります。

関連する問題