indexing - 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 会使用p1
和p2
的 ID 在MERGE
. 我应该索引吗?或者我应该索引该joinTimestamp
属性,因为它在MATCH
查询中使用?也许索引根本无法帮助这个查询?
解决方案
您不能使用节点的本机 ID 进行索引(因为节点的本机 ID 并不是节点的真正“属性”)。而且您无论如何都不需要这样做,因为 neo4j 已经可以通过其本机 ID 快速到达节点。
相反,您可以 index :Person(joinTimestamp)
,因为joinTimestamp
它是的属性:Person
(并且您的查询可以在开始时使用它)。
顺便说一句,您始终可以使用分析来验证是否会使用索引。
推荐阅读
- python - 数字打印机,随机整数不起作用
- visual-studio-code - 如何在 vscode 中将文本框输入添加到标题栏
- apache-spark - 使用 sparkmeasure 时 Java 对象不可调用
- python - UndefinedColumn postgres Python
- excel - SumIF & Merge columns based on another column criteria VBA
- angular - Nginx 不为 Docker 映像中托管的 Angular 提供服务
- r - 如何在 R 中运行多元回归时缩短扫帚中的代码?
- python - 如何获取每个月的索引号作为新列
- python - adjust_text 的 only_move 参数不适用于在绘图区域之外重叠最后一个值?
- javascript - Javascript中“新”创建的对象的函数