indexing - 尽管使用了索引,但简单的查找需要几分钟
问题描述
我有一个大小合适的图(约 6 亿个节点,35 亿条边),我将其导入 neo4j。该图也非常密集(边数中位数约为 10);虽然我不确定这是否会影响性能。
对于一种类型的节点(:Authors)
——这种类型的节点大约有 2 亿个——我想运行一个特定名称的查询,该名称存储在属性中normalizedName
。这是(非常简单的)查询:
MATCH (a:AUTHOR)
WHERE a.normalizedName = "jonathan smith"
RETURN a
正如人们所预料的那样,这个查询需要很长(几分钟)的时间来执行。尽管我没有明确保证此属性的唯一性,但我仍然尝试在其上创建索引,并且我没有收到 neo4j 的任何投诉。之后,由于索引中查找的 O(1) 复杂性,我预计上述查询将在 ms 内执行。不幸的是,查询仍然需要几分钟。
我究竟做错了什么?
解决方案
确保您已将索引设置为
CREATE INDEX ON :AUTHOR(normalizedName)
请注意,您需要为希望使用索引查找的每个属性设置索引。这也由节点标签过滤,即如果您在节点上使用多个标签并且需要查找索引,则需要为每个标签设置一个,例如,如果您有:Person:Author,您还需要放:
CREATE INDEX ON :Person(normalizedName)
推荐阅读
- java - 如何在不使用 android 中任何类型的对话框或模型的情况下创建日期选择器
- react-native - React Native - 在抽屉导航中的不同堆栈之间导航
- javascript - Rails 6 + Webpack document.addEventListener 不工作
- bootstrap-4 - 在引导程序上形成两列
- apache-kafka - 缺少嵌入式KafkaCluster?
- java - OffsetDateTime jsonFormat 允许两种类型的模式
- python - 如何将信息从熊猫数据框列映射到一些可视化?
- python - 有人可以告诉我为什么这是错误的吗?
- javascript - chart.js 显示两个日期之间的均匀间隔并将标签添加到 y 轴
- html - CSS 用过渡摇动 gif