查询中未使用 Couchbase 数组索引

斯雷拉格

我有以下文档结构:


{    
  "customerId": "",
  "schemeId": "scheme-a",  
  "type": "account",
  "events": [
    {
      "dateTime": "2019-03-14T02:23:58.573Z",
      "id": "72998bbf-94a6-4031-823b-6c304707ad49",
      "type": "DebitDisabled",
      "authorisedId": ""
    },
    {
      "dateTime": "2018-05-04T12:40:15.439Z",
      "transactionReference": "005171-15-1054-7571-60990-20180503165536",      
      "id": "005171-15-1054-7571-60990-20180503165536-1",
      "type": "Credit",
      "authorisedId": ",
      "value": 34,
      "funder": "funder-a"
    },
    {
      "dateTime": "2019-03-06T04:14:54.564Z",
      "transactionReference": "000000922331",
      "eventDescription": {
        "language": "en-gb",
        "text": "
      },
      "id": "000000922331",
      "type": "Credit",
      "authorisedId": "",
      "value": 16,
      "funder": "funder-b"
    },
    {
      "dateTime": "2019-03-10T04:24:17.903Z",
      "transactionReference": "000001510154",
      "eventDescription": {
        "language": "en-gb",
        "text": ""
      },
      "id": "000001510154",
      "type": "Credit",
      "authorisedId": "",
      "value": 10,
      "funder": "funder-c"
    }
  ]
}

以及以下索引:

CREATE INDEX `scheme-a_customers_index` 
ON `default`(`type`,`schemeId`,`customerId`) 
WHERE ((`schemeId` = "scheme-a") and (`type` = "account")) 
WITH { "num_replica":1 }

CREATE INDEX `scheme-a_credits_index` 
ON `default`(
`type`,
`schemeId`,
`customerId`,
(distinct (array (`e`.`funder`) for `e` in `events` when ((`e`.`type`) = "Credit") end))
) 
WHERE ((`type` = "scheme") and (`schemeId` = "scheme-a")) 
WITH { "num_replica":1 }

我正在尝试为每个 where type="credit" 和诸如“funder%”之类的资助者查询所有 customerIds 和事件

以下是我的查询:

SELECT 
    customerId, 
    (ARRAY v.`value` FOR v IN p.events WHEN v.type = "Credit" AND v.funder like "funder%" END) AS credits 
FROM default AS p 
WHERE p.type = "account" AND p.schemeId = "scheme-a" 
AND (ANY e IN p.events SATISFIES e.funder = "funder-a" END) 

我期待查询使用 index scheme-a_credits_index,而不是使用scheme-a_customers_index. 不明白为什么!查询不应该使用scheme-a_credits_index吗?

对决

您的查询没有关于 customerId 的谓词。因此查询只能将两个谓词推送给索引器,并且两个索引都是合格的。由于非数组索引导致索引中的条目数,scheme-a_customers_index 效率更高。

您应该尝试以下操作。

CREATE INDEX `ix1` ON `default`
(DISTINCT ARRAY e.funder FOR e IN events WHEN e.type = "Credit" END, `customerId`)
WHERE ((`schemeId` = "scheme-a") and (`type` = "account")) ;

SELECT
    customerId,
    (ARRAY v.`value` FOR v IN p.events WHEN v.type = "Credit" AND v.funder like "funder%" END) AS credits
FROM default AS p
WHERE p.type = "account" AND p.schemeId = "scheme-a"
AND (ANY e IN p.events SATISFIES e.funder LIKE "funder%" AND e.type = "Credit" END);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Couchbase索引

来自分类Dev

Couchbase N1QL:对数组字段进行索引和查询

来自分类Dev

Couchbase中的索引-使用主索引而不是辅助索引

来自分类Dev

Couchbase中的索引注意事项。

来自分类Dev

Couchbase查询按数组中的标记进行过滤

来自分类Dev

Couchbase中的列表/数组元素访问

来自分类Dev

如何在 Python 中创建索引时使用 Couchbase 函数?

来自分类Dev

查询中的索引数组

来自分类Dev

查询中的索引数组

来自分类Dev

在Couchbase中查询“不在”

来自分类Dev

Couchbase服务器中索引的用途是什么?

来自分类Dev

无法使用 groovy 脚本在 couchbase 上创建主索引

来自分类Dev

在嵌套数组中的未知父母的子项中查找(Couchbase)

来自分类Dev

如何在Couchbase数组中搜索特定字符串

来自分类Dev

克服Couchbase中的查询限制

来自分类Dev

数组未正确索引

来自分类Dev

Elasticsearch数组索引查询

来自分类Dev

如何在N1QL和Couchbase中创建索引并使用联接

来自分类Dev

使用索引数组索引多维 numpy 数组

来自分类Dev

在代码中创建Couchbase视图:第一个查询返回0行,索引在后台构建

来自分类Dev

当执行参数化的N1QL查询时,Couchbase不使用带有过滤器的索引

来自分类Dev

Perl中的数组索引

来自分类Dev

在MATLAB中索引数组

来自分类Dev

python中的索引数组

来自分类Dev

使用“ sed”的数组索引

来自分类Dev

查询中未使用 PostgreSql jsonb 列上的 GIN 索引

来自分类Dev

iOS使用CouchBase Lite

来自分类Dev

PostgreSQL查询未使用索引

来自分类Dev

在Verilog数组中找到未使用的索引?