【问题标题】:Couchbase metrics sortcount always zero - N1QL + .NET SDKCouchbase 指标 sortcount 始终为零 - N1QL + .NET SDK
【发布时间】:2020-12-13 14:41:40
【问题描述】:

我需要总数。可用于显示条件的记录数 - “'总记录'的第 1 页”(我在网格中显示数据)。根据 Couchbase 论坛,排序计数指标应该给我总记录,但它给我零。非常感谢任何帮助。使用 .NET SDK。

使用的 N1QL 查询:

        select  Title
        from `CMS`
        where LastUpdatedOn > 0 and IsLatestVersion = true   
        order by LastUpdatedOn DESC LIMIT 2

使用的索引:

    CREATE INDEX `CMS_idx_LastUpdatedOnDesc_IsLatestVersion` ON `CMS`(LastUpdatedOn DESC, IsLatestVersion);

【问题讨论】:

    标签: couchbase n1ql couchbase-java-api


    【解决方案1】:

    查询 ORDER BY 子句遵循索引键顺序。因此查询使用索引顺序并避免排序并快速提供结果。发生这种情况时,度量中的 sortCount 将丢失(为零 0)。由于它使用索引顺序,因此一旦满足查询,它就会终止索引扫描。所以总的合格记录是未知的。您需要发出显式计数查询才能知道总结果。

    即使查询使用 LIMIT + OFFSET (

    以下索引可以表现更好。该查询识别 IsLatestVersion 相等谓词并仍使用索引顺序。这样可以避免更多的索引扫描页面(类似于btree)

    CREATE INDEX `CMS_idx_LastUpdatedOnDesc_IsLatestVersion` ON 
      `CMS`(IsLatestVersion, LastUpdatedOn DESC, Title); 
    
    SELECT  Title
    FROM `CMS`
    WHERE LastUpdatedOn > 0 and IsLatestVersion = true   
    ORDER BY LastUpdatedOn DESC 
    LIMIT 2
    

    https://blog.couchbase.com/offset-keyset-pagination-n1ql-query-couchbase/

    【讨论】:

    • 非常感谢,伙计,这个答案很有用。我还有一个问题,在查询中使用 OR 条件后,我遇到了性能问题。以下查询的索引应该是什么? SELECT Count(1) FROM CMS WHERE LastUpdatedOn > 0 AND (EditedBy = 'me' OR IsLatestVersion = true)
    • 谢谢,那个链接非常有用。我尝试了下面的小查询来检查我是否得到了 sortcount(仅用于学习),但是即使对于这个小查询,排序计数仍然为零,我错过了什么吗?如果我能够看到任何小查询的排序计数,我会很高兴。 SELECT Title FROM CMS` WHERE LastUpdatedOn > 0 和 IsLatestVersion = true`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多