首页 > 解决方案 > Neo4j - 我如何决定索引什么?

问题描述

假设我创建了 50KPerson秒:

UNWIND [ ... ] AS name
CREATE (:Person { name: name, joinTimestamp: 1000000 })

我需要让这些节点在彼此之间创建随机关系:

MATCH (p1:Person { joinTimestamp: 1000000 }), (p2:Person { joinTimestamp: 1000000 })
WITH p1, p2, rand() AS random
WHERE random < 0.001 AND p1 <> p2
MERGE (p1)-[:FRIENDS_WITH]->(p2)

这可行,但我想加快第二个查询。我应该索引什么?我会假设 Neo4j 会使用p1p2的 ID 在MERGE. 我应该索引吗?或者我应该索引该joinTimestamp属性,因为它在MATCH查询中使用?也许索引根本无法帮助这个查询?

标签: indexingneo4jcypher

解决方案


您不能使用节点的本机 ID 进行索引(因为节点的本机 ID 并不是节点的真正“属性”)。而且您无论如何都不需要这样做,因为 neo4j 已经可以通过其本机 ID 快速到达节点。

相反,您可以 index :Person(joinTimestamp),因为joinTimestamp 它是的属性:Person(并且您的查询可以在开始时使用它)。

顺便说一句,您始终可以使用分析来验证是否会使用索引。


推荐阅读