【问题标题】:Couchbase Secondary index on filter过滤器上的 Couchbase 二级索引
【发布时间】:2019-01-10 08:44:27
【问题描述】:

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

【问题讨论】:

    标签: couchbase n1ql


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢@Rizwan 澄清第一个问题。但是,关于第二个问题,我想知道哪个会快。
    • 更快,即在 2 个字段上有一个索引或在每个字段上有单独的索引。
    • @lok​​endralovely 这可能是性能最优的一个有偏见的答案。因为它为该索引维护两个不同的字典 - Composite (col a, col b)
    猜你喜欢
    • 2015-11-29
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2016-04-05
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    相关资源
    最近更新 更多