N1QL查询ARRAY_CONTAINS速度

时间:2016-11-16 23:30:03

标签: couchbase n1ql

我需要查询以下表格的文件:

{
  "id": "-KWiJ1LlYbXSSRUmocwK",
  "ownerID": "72f16d9d-b905-498c-a7ff-9702cdcae996",
  "orgID": "20071513",
  "teams": [
    "5818f7a75f84c800079186a8",
    "5818cbb25f84c800079186a7"
  ]
}

我希望能够基于ownerID和teams数组进行查询。我的查询目前看起来像这样:

SELECT id FROM
default AS p 
WHERE p.ownerID = $1
OR ARRAY_CONTAINS(p.teams, $2)
ORDER BY id

因此,我可以获取具有预期ownerID的文档以及在teams数组中具有特定团队ID的文档。这个查询确实有效,但是当我有很多文档时,我很关心性能,可能一些文档最多可以分配20个团队。

我是在正确的轨道上吗?

编辑:Couchbase ver 4.1

1 个答案:

答案 0 :(得分:1)

Couchbase 4.5引入了数组索引。这允许您索引数组的各个元素,在您的情况下是teams数组。这对于查询的性能至关重要。使用4.5.1或4.6,您将执行:

CREATE INDEX idx_owner ON default( ownerID );
CREATE INDEX idx_teams ON default( DISTINCT ARRAY t FOR t IN teams END );

SELECT id
FROM default AS p
WHERE p.ownerID = $1
UNION
SELECT id
FROM default AS p
WHERE ANY t IN p.teams SATISFIES t = $2 END;