将列表作为参数传递会影响查询性能

时间:2016-04-25 23:19:31

标签: neo4j cypher

我在Linux中使用Neo4j Community 3.0-RC1(Debian 8)。我有一个cypher查询,如下所示:

MATCH (t1:LABEL1)-[r:REL_TYPE1|REL_TYPE2]->(n)
      <-[:REL_TYPE1|REL_TYPE2]-(t2:LABEL2)-[:REL_TYPE3]->(s:LABEL3) 
WHERE s.code IN ['c1','c2']

当我使用PROFILE在浏览器中运行它时,我在5571毫秒内获得了13629891个db数据集。

问题在于,当我运行相同的查询但对WHERE子句中使用的集合使用命名参数时,即

MATCH (t1:LABEL1)-[r:REL_TYPE1|REL_TYPE2]->(n)
      <-[:REL_TYPE1|REL_TYPE2]-(t2:LABEL2)-[:REL_TYPE3]->(s:LABEL3) 
WHERE s.code IN {codes}

需要15到20秒(而不是5或6秒)。

我正在使用py2neo使用python,但我确认在使用时会发生同样的情况:

:POST /db/data/transaction/commit {
    "statements": [
    {
        "statement": ...,
        "parameters": {
            "codes": [...]
        }
    }
    ]
}

直接来自浏览器。

这是预期的行为还是某处可能存在错误?

此致

0 个答案:

没有答案