我有以下疑问:
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 次数据库点击。
这是计划:
我对数据库为这种关系产生的数据库点击量感到惊讶:
(c1:Criterion)-[rc1t:CONTAINS ]->(c1t:Translation)
但是我有
MATCH()-[rc1t:CONTAINS]-() RETURN count(rc1t)
3295092
关系...
有什么办法可以提高这个查询的性能吗?
您的查询找到了 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)