Neo4j中节点索引的使用

Neo4j中节点索引的使用,neo4j,data-modeling,graph-databases,Neo4j,Data Modeling,Graph Databases,根据这本Neo4j书的这一部分,Graph数据库引擎通过将给定节点的ID与记录的大小(9字节)相乘来查找该节点的位置 但是我已经读到,如果节点上有一个索引,db引擎将使用该索引快速查找节点的位置。如果引擎可以非常容易地计算节点的位置,而不需要索引,那么为什么我们需要在节点上放置索引?您正在阅读的文章是关于节点索引的。这意味着节点的记录存储为索引。但是,该记录不包含节点的实际属性,只包含查找该信息的引用。由于这是一个节点内部id索引,因此它仅适用于按内部id查找节点 您需要在节点的属性上创建单独的

根据这本Neo4j书的这一部分,Graph数据库引擎通过将给定节点的ID与记录的大小(9字节)相乘来查找该节点的位置


但是我已经读到,如果节点上有一个索引,db引擎将使用该索引快速查找节点的位置。如果引擎可以非常容易地计算节点的位置,而不需要索引,那么为什么我们需要在节点上放置索引?

您正在阅读的文章是关于节点索引的。这意味着节点的记录存储为索引。但是,该记录不包含节点的实际属性,只包含查找该信息的引用。由于这是一个节点内部id索引,因此它仅适用于按内部id查找节点

您需要在节点的属性上创建单独的索引,以查找没有id的节点。否则,DB必须扫描所有节点,以查找哪些节点具有特定值的属性

TL:DR;
不要担心数据库是如何工作的。把这留给数据库管理员,因为数据库是由原始奥术黑魔法组成的

简言之,如果您恰好拥有要查找的节点的图形id,那么这将是最快的。但在大多数实际查询中,您永远不会从这个开始,而是希望通过属性值查找节点,无论是直接的、部分的,还是从某个范围或类似的。这就是为什么要在标签/属性组合上创建索引,以便可以通过这种方式进行查找。