具有一种关系的 Neo4j 查询正在生成大量数据库命中

问题描述 投票:0回答:1

我有以下疑问:

PROFILE
MATCH (c1:Criterion)-[rc1t:CONTAINS ]->(c1t:Translation)
WHERE c1.id IN [5890, 1666, 1283, 4548, 25157, 966, 9320, 2344, 8202, 1707, 461, 7279, 14897, 4147, 4598, 2966, 17784, 77304, 762, 10490, 6012, 3230]
RETURN count(rc1t)

仅返回 5 个关系。

Cypher 版本:5,规划器:COST,运行时:SLOTTED。 45 毫秒内总共 172821 次数据库点击。

这是计划:

enter image description here

我对数据库为这种关系产生的数据库点击量感到惊讶:

(c1:Criterion)-[rc1t:CONTAINS ]->(c1t:Translation)

但是我有

MATCH()-[rc1t:CONTAINS]-() RETURN count(rc1t)

3295092
关系...

有什么办法可以提高这个查询的性能吗?

neo4j cypher query-optimization
1个回答
0
投票

您的查询找到了 22 个

Criterion
节点,它们总共有 86,352 个传出
CONTAINS
关系。但这些关系另一端只有 5 个节点具有
Translation
标签。

为了提高此用例的性能,您可以在适当的

CONTAINS_TRANSLATION
对之间创建
Criterion/Translation
关系,然后将查询更改为 followjng(请注意,
c1t
不再需要指定标签,这进一步加快了查询速度)查询):

MATCH (c1:Criterion)-[rc1t:CONTAINS_TRANSLATION]->(c1t)
WHERE c1.id IN [5890, 1666, 1283, 4548, 25157, 966, 9320, 2344, 8202, 1707, 461, 7279, 14897, 4147, 4598, 2966, 17784, 77304, 762, 10490, 6012, 3230]
RETURN count(rc1t)
© www.soinside.com 2019 - 2024. All rights reserved.