我在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"
OR
答案 0 :(得分:0)
覆盖全球二级索引将无需从数据服务中检索文档,从而提供最佳性能。
查询时使用显式字段名称。如果您使用select *
,Couchbase仍然必须转到数据服务,以查看从索引中排除的其他字段。
在您的情况下,您需要两个索引:
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";
如果您不需要entity.id
,可以将其从已覆盖的字段中删除。
请注意delete
必须在`
中,因为它是保留字。