首页 > 解决方案 > 尽管使用了索引,但简单的查找需要几分钟

问题描述

我有一个大小合适的图(约 6 亿个节点,35 亿条边),我将其导入 neo4j。该图也非常密集(边数中位数约为 10);虽然我不确定这是否会影响性能。

对于一种类型的节点(:Authors)——这种类型的节点大约有 2 亿个——我想运行一个特定名称的查询,该名称存储在属性中normalizedName。这是(非常简单的)查询:

MATCH (a:AUTHOR)
WHERE a.normalizedName = "jonathan smith"
RETURN a

正如人们所预料的那样,这个查询需要很长(几分钟)的时间来执行。尽管我没有明确保证此属性的唯一性,但我仍然尝试在其上创建索引,并且我没有收到 neo4j 的任何投诉。之后,由于索引中查找的 O(1) 复杂性,我预计上述查询将在 ms 内执行。不幸的是,查询仍然需要几分钟。

我究竟做错了什么?

标签: indexingneo4j

解决方案


确保您已将索引设置为

CREATE INDEX ON :AUTHOR(normalizedName)

请注意,您需要为希望使用索引查找的每个属性设置索引。这也由节点标签过滤,即如果您在节点上使用多个标签并且需要查找索引,则需要为每个标签设置一个,例如,如果您有:Person:Author,您还需要放:

CREATE INDEX ON :Person(normalizedName)

推荐阅读