我使用 neo4j-import 工具将大数据集(远超过10米的节点)导入neo4j。导入我的数据后,我对它运行了几个查询。其中一个查询表现非常糟糕。我尽可能地优化它(PROFILING,使用关系类型,拆分多核支持等等)。
仍然需要很长时间,所以我的想法是通过使用 USING INDEX 子句告诉 neo4j 从特定类型的节点开始。然后,我可以检查我的db命中如何更改并可能使其工作。现在我的数据库没有索引。
我想在编写完所需的所有查询后创建索引,但似乎我需要开始使用它们。
我想知道我是否可以在批量导入过程中创建这些索引。这似乎是一个很好的解决方案。我该怎么做?
另外我想知道是否可以实际编写一个语句来为我的每个节点上存在的属性创建索引(让我们调用它& #34;类型"。)
CREATE INDEX ON :(type);
不起作用(标签丢失,但我想省略它)
答案 0 :(得分:2)
索引位于标签+属性上。在导入之后和开始尝试优化查询之前,您需要索引。您的查询将用于查找起点的任何内容都应该被索引(user_id,object_id等),并且可能是用于范围查询的任何日期或属性(modified_on,weight等)。
CREATE INDEX ON :Label(property)
Cypher查询是单线程的,因此我不知道您对多核支持的意思。你读到了什么,得到了一个链接?你可以多线程Neo4j,但此时你必须手动完成。见https://maxdemarzi.com/2017/01/06/multi-threading-a-traversal/
大多数情况下,可以使用索引对查询进行大幅优化,或者以不同方式表达查询。但有时您需要重做模型以适合查询。请查看https://maxdemarzi.com/2015/08/26/modeling-airline-flights-in-neo4j/以获取一些提示。