过滤器上的 Couchbase 二级索引

Couchbase Secondary index on filter

我正在使用 Couchbase 6.0。我知道我们可以在过滤器上创建二级索引。

所以我创建了一个像

这样的索引
CREATE INDEX idx_zipcode
       ON userbucket(zipcode)
       WHERE status = "active";

我有一个问题:

如果字段是动态的,我可以在过滤器子句上创建索引吗?

像这样

CREATE INDEX idx_zipcode
       ON userbucket(zipcode)
       WHERE status = ? ;

第二个问题是,

哪个性能更好:

Single index on 2 fields

CREATE INDEX idx_1 ON userbucket('fname','lname')

每个字段的单独索引

CREATE INDEX idx_1 ON userbucket('fname')
CREATE INDEX idx_2 ON userbucket('lname')

不,我们不能使用提到的接受绑定变量的动态子句创建索引。

然而,当确定状态和邮政编码是谓词的一部分并且本质上是动态的时,如下所示的索引会很方便。

CREATE INDEX idx_zipcode_status  ON userbucket(zipcode, status);

参考Couchbase Index Creation Blog - right performance.

关于第二个查询,同样的原则适用于

Index selection for a query solely depends on the filters in the WHERE clause of your query

当您的查询中同时包含前导列或前导列时,辅助复合索引也可以。

CREATE INDEX idx_1 ON userbucket('fname','lname')

上述索引将被以下查询利用:

SELECT * FROM userbucket WHERE fname= 'fnam' AND lname= 'lnam';