我正在使用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')
答案 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';