我有一个在rdbms中建立索引的想法,但是无法想到在neo4j中建立索引的方式以及模式索引是什么?
答案 0 :(得分:2)
要引用neo4j的免费书籍Graph Databases:
索引有助于优化查找特定节点的过程。
大多数 时间,当查询图表时,我们很高兴让遍历 过程发现满足我们的节点和关系 信息目标。通过遵循与特定匹配的关系 图形模式,我们遇到了有助于查询的元素 结果。但是,在某些情况下,我们需要选择 直接找出特定的节点,而不是在整个过程中发现它们 遍历。确定遍历的起始节点 例如,要求我们根据某个节点找到一个或多个特定节点 标签和属性值的组合。
同一本书还对neo4j和关系数据库进行了广泛的比较。
关于上述indexes(也称为“模式索引”)的索引:它们索引具有特定节点 label 和节点 property < / strong>组合。
还有另一种称为"manual" (or "legacy", or "explicit") indexing的索引编制机制,现在仅推荐用于特殊情况。
[更新]
作为示例,假设我们已经在:Person(firstname)
上创建了一个索引,如下所示:
CREATE INDEX ON :Person(firstname);
在这种情况下,可以通过使用索引找到所需的Person
节点来快速开始以下查询。找到这些节点后,neo4j可以轻松地遍历其传出的WORKS_AT
关系以找到相关的Company
节点:
MATCH (p:Person)-[:WORKS_AT]->(c:Company)
WHERE p.firstname = 'Karan'
RETURN p, c;
没有该索引,查询将必须:
Person
个节点以找到正确的节点,然后再遍历其传出的WORKS_AT
关系,或者Company
个节点,遍历其传入的WORKS_AT
关系,并在关系的另一端比较每个firstname
的{{1}}值。