【问题标题】:Cypher: Creating a schema index that already existsCypher:创建一个已经存在的模式索引
【发布时间】:2016-08-09 14:56:33
【问题描述】:

当您要求 Neo4j 创建一个已经存在的索引时,它不会抛出异常,这对我的目的来说似乎很好。

session.run("CREATE INDEX ON :User(email)");

问题 1:

但是 neo4j 是如何在后台处理这个问题的呢?它是删除索引然后重新创建它,还是因为索引已经存在而完全忽略查询?

我想知道,因为我有一些 CRUD 操作,并且我想在创建节点时为其定义架构,这意味着调用“CREATE INDEX”等等。缺点是这意味着对于创建的每个新节点都会进行冗余调用以创建索引,如果索引已经存在则忽略它们就可以了。

问题 2:

我注意到即使没有带有标签用户的节点存在以下工作(这意味着我可以在关联节点之前创建标签和索引)。

CREATE INDEX ON :User(email)

我是 Neo4j 的新手,并且习惯使用 RDBMS 世界,您无法在不存在的列上创建索引。我是否认为在创建具有这些标签和属性的节点之前创建索引和标签不会导致任何不可预见的问题?

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    回答问题 #2,即使不存在具有这些标签或属性的节点也创建索引和约束是完全没问题的,实际上这是一种极其常见的情况。我强烈推荐这条路线。

    我建议不要在每个节点创建时都创建索引。虽然我不认为它会导致很多浪费的周期,但它似乎不是一个好的设计。

    【讨论】:

      【解决方案2】:

      问题 1

      如果您正在创建约束,这将不起作用。它们只能被调用一次,如果它们存在,它们确实会抛出异常。普通索引似乎不这样做,所以不应该尝试整个方法。

      问题 2

      查看 InverseFalcons 评论,但这似乎是正确的方法。

      【讨论】:

        猜你喜欢
        • 2019-10-05
        • 1970-01-01
        • 1970-01-01
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-28
        相关资源
        最近更新 更多