Couchbase筛选器上的二级索引

时间:2019-01-10 08:44:28

标签: couchbase n1ql

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

所以我创建了一个类似

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

我在这里有一个问题:

如果字段是动态的,是否可以在filter子句上创建索引。

类似这样的东西

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')

1 个答案:

答案 0 :(得分:3)

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

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

CREATE INDEX idx_zipcode_status  ON userbucket(zipcode, status);

引用Couchbase Index Creation Blog - right performance

关于第二个查询,其原理与

  

查询的索引选择仅取决于WHERE中的过滤器   查询子句

当您在查询中同时包含两列或前导列时,二级复合索引也可以。

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

上面的索引将被诸如以下的查询利用:

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