过滤器上的 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';
我正在使用 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';