Performance 3个密码查询中的差异

Performance 3个密码查询中的差异,performance,neo4j,cypher,Performance,Neo4j,Cypher,我在Cypher中有三个类似的查询,它们产生不同的结果 Q1-返回结果平均约为110毫秒 MATCH(a:person{pid:'48})-[:FRIEND*2..2]>(fof) 其中不是(a)-[:FRIEND]->(fof) 返回fof.pid Q2-返回平均约70毫秒 MATCH(a:person{pid:'48})-[:FRIEND]>(f) 与a,收集(f)作为朋友 匹配(a)-[:FRIEND]->(:person)-[:FRIEND]->(fof) 哪里没有(fof在朋友中) 返

我在Cypher中有三个类似的查询,它们产生不同的结果

Q1-返回结果平均约为110毫秒

MATCH(a:person{pid:'48})-[:FRIEND*2..2]>(fof)
其中不是(a)-[:FRIEND]->(fof)
返回fof.pid

Q2-返回平均约70毫秒

MATCH(a:person{pid:'48})-[:FRIEND]>(f)
与a,收集(f)作为朋友
匹配(a)-[:FRIEND]->(:person)-[:FRIEND]->(fof)
哪里没有(fof在朋友中)
返回fof.pid

Q3-在可比时间内不返回结果

MATCH(a:person{pid:'48})-[:FRIEND]->(:person)-[:FRIEND]->(fof:person)
其中非(a)-[:FRIEND]->(fof)返回fof.pid

这里的本质区别是什么

编辑:


版本-Neo4j 2.2.0-M03,嵌入式DB

请您检查Neo4j 2.2.0-M04(注意:这是一个里程碑-不用于生产)?2.2有一个基于成本的密码优化器,在查询运行时可能会有不同的结果。@StefanArmburster对不起,我应该提到,我实际上使用的是Neo4j 2.2.0-M03版本。M04会有什么不同吗?我使用嵌入java的数据库得到这些结果。查询返回不同的东西,因为它们是不同的。Q1和Q3不允许
a
链接到
fof
,但Q2似乎允许这样做。如果您
PROFILE
这些,它们的访问模式看起来非常不同,特别是Q2。@Frobberofits Q2不允许使用
WHERE NOT(fof IN friends)
子句链接到fof。不是吗?从我的理解来看,这三个查询都做了相同的事情……是的,它们返回的访问模式非常不同,对于我所在的数据库,剖析Q3让控制台挂起。对于Q1和Q2,总数据库访问返回非常接近的结果。我不确定我是否明白这里发生了什么。