Neo4j 关系存在查询数据库命中过多

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

我有一个检索 1,500 名客户和具有特定 ID 的促销活动的查询。然后,查询会检查这些客户是否没有此促销活动。

我的问题是,这一步查询导致数据库点击次数过多,大约120,000次点击:

WHERE NOT (customers)-[:HAS_PROMOTION]->(promo)

这是查询

PROFILE
MATCH(promo:Promotion{id: "XXXX"})
WHERE promo.end_time > timestamp()
MATCH (c:Customer)
WITH promo, c AS customers SKIP 9000 LIMIT 1500
WHERE NOT (customers)-[:HAS_PROMOTION]->(promo)
RETURN customers.id

简介第一部分 简介第二部分

我尝试使用exists函数,但没有任何区别 我还反转了关系方向,速度快了 10% 左右

database neo4j nosql cypher graph-databases
1个回答
0
投票

根据您的数据,首先获得所有促销客户,然后返回所有其他客户可能会更有效。例如:

MATCH(promo:Promotion{id: "XXXX"})<-[:HAS_PROMOTION]-(pc:Customer)
WHERE promo.end_time > timestamp()
WITH COLLECT(ID(pc)) AS promotedCustomers
MATCH (c:Customer)
WHERE NOT ID(c) IN promotedCustomers
RETURN c.id
© www.soinside.com 2019 - 2024. All rights reserved.