【发布时间】:2021-12-24 14:59:45
【问题描述】:
我正在尝试计算 Neo4j 将返回的行数,但计数(或查询)非常慢。
版本 1(70 秒):
MATCH (person:Person)-[:HAS_ORDER]->(order:Order)
WHERE order.timestamp >= 1632434400 AND size((order)<-[:HAS_ORDER]-(:OrderLine)-[:HAS_PRODUCT]->(:Product)) <= 20
WITH order
MATCH (order)<-[:HAS_ORDER]-(:OrderLine)-[:HAS_PRODUCT]->(product:Product)
RETURN COUNT(product);
第 2 版(68 秒):
MATCH (person:Person)-[:HAS_ORDER]->(order:Order)
WITH size((order)<-[:HAS_ORDER]-(:OrderLine)-[:HAS_PRODUCT]->(:Product)) AS amount
WHERE order.timestamp >= 1632434400 AND amount <= 20
RETURN SUM(amount)
使用 Neo4j 4.4 社区,大约有 800000 个订单和大约 17000000 个订单行。
有没有更有效的方法来计算行数?
这些是索引:
CREATE INDEX idx_order_torder_id FOR (n:Order) ON (n.order_id);
CREATE INDEX idx_order_timestamp FOR (n:Order) ON (n.timestamp);
CREATE INDEX idx_person_person_id FOR (n:Person) ON (n.person_id);
CREATE INDEX idx_product_product_id FOR (n:Product) ON (n.product_id);
行数等于4269011。
【问题讨论】:
-
你有索引吗?你能分享一下 Neo4j 在 :schema 之后重新运行的内容吗?
标签: neo4j count cypher relationship rows