N1QL 查询 ARRAY_CONTAINS 速度
N1QL Query ARRAY_CONTAINS speed
我有如下形式的文件需要查询:
{
"id": "-KWiJ1LlYbXSSRUmocwK",
"ownerID": "72f16d9d-b905-498c-a7ff-9702cdcae996",
"orgID": "20071513",
"teams": [
"5818f7a75f84c800079186a8",
"5818cbb25f84c800079186a7"
]
}
而且我希望能够根据 ownerID 和团队数组进行查询。我的查询目前看起来像这样:
SELECT id FROM
default AS p
WHERE p.ownerID =
OR ARRAY_CONTAINS(p.teams, )
ORDER BY id
因此我可以获得具有预期 ownerID 的文档以及在团队数组中具有特定团队 ID 的文档。此查询确实有效,但我担心我有很多文档时的性能,并且可能某些文档最多分配了 20 个团队。
我走的路对吗?
编辑:Couchbase 版本 4.1
Couchbase 4.5 引入了数组索引。这允许您索引数组的各个元素,在您的例子中是团队数组。这对于查询的性能至关重要。对于 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 =
UNION
SELECT id
FROM default AS p
WHERE ANY t IN p.teams SATISFIES t = END;
我有如下形式的文件需要查询:
{
"id": "-KWiJ1LlYbXSSRUmocwK",
"ownerID": "72f16d9d-b905-498c-a7ff-9702cdcae996",
"orgID": "20071513",
"teams": [
"5818f7a75f84c800079186a8",
"5818cbb25f84c800079186a7"
]
}
而且我希望能够根据 ownerID 和团队数组进行查询。我的查询目前看起来像这样:
SELECT id FROM
default AS p
WHERE p.ownerID =
OR ARRAY_CONTAINS(p.teams, )
ORDER BY id
因此我可以获得具有预期 ownerID 的文档以及在团队数组中具有特定团队 ID 的文档。此查询确实有效,但我担心我有很多文档时的性能,并且可能某些文档最多分配了 20 个团队。
我走的路对吗?
编辑:Couchbase 版本 4.1
Couchbase 4.5 引入了数组索引。这允许您索引数组的各个元素,在您的例子中是团队数组。这对于查询的性能至关重要。对于 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 =
UNION
SELECT id
FROM default AS p
WHERE ANY t IN p.teams SATISFIES t = END;