当您要求 Neo4j 创建一个已经存在的索引时,它不会抛出异常,这似乎很适合我的目的。
session.run("CREATE INDEX ON :User(email)");
问题 1:
但是 neo4j 是如何在幕后处理这个问题的呢?它是删除索引然后重新创建它,还是因为索引已经存在而完全忽略查询?
我想知道,因为我有一些 CRUD 操作,并且我想在创建节点时定义节点的架构,这意味着调用“CREATE INDEX”等等。缺点是这意味着对于创建的每个新节点都会进行创建索引的冗余调用,如果索引已经存在则忽略它们就可以了。
问题2:
我注意到即使尚不存在带有标签 User 的节点,以下工作也会起作用(这意味着我可以在关联节点之前创建标签和索引)。
CREATE INDEX ON :User(email)
我是 Neo4j 的新手,并且习惯了 RDBMS 世界,在该世界中,您无法在不存在的列上创建索引。我是否正确地相信,在创建具有这些标签和属性的节点之前创建索引和标签不会导致任何不可预见的问题?
最佳答案
回答问题#2,即使不存在具有这些标签或属性的节点,也可以创建索引和约束,这完全没问题,而且实际上是一种极其常见的情况。我强烈推荐走这条路。
我建议不要在每次创建节点时都创建索引。虽然我不认为它会造成太多的循环浪费,但它看起来并不是一个好的设计。
关于neo4j - Cypher:创建已存在的架构索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38841818/