为什么这个cypher查询只有~30个节点并说50个关系这么慢?

时间:2015-03-12 07:57:35

标签: neo4j cypher

MATCH
  (t:T)-[:Rel]-(o:Espresso)-[:Rel]->(l:Location)<-[:Rel]-(p:Espresso {id:"ttt"})-[:Rel]->t,
  o--(:Rating)--p
RETURN
  distinct o.id AS otherId,
  l.location AS location,
  t.hour AS hour,
  t.day as day

它超时了。我尝试将其作为where子句并使用with但没有区别。 ,快速执行前的第一部分......

3 个答案:

答案 0 :(得分:1)

整个数据库中只有30个节点/ 50个关系?这看起来很奇怪......你以前创建/删除了很多节点,可能是实验的一部分吗?如果是这样,您可能想尝试重新启动服务器。

答案 1 :(得分:1)

改进在您的查询/结构中

  1. 不要使用&#34;,&#34;在匹配中,它将作为笛卡尔积。
  2. 您在所有节点之间使用相同的关系:Rel note - 始终尝试在不同类型的节点中使用唯一的关系名称。
  3. 首先阅读本文档 http://neo4j.com/docs/stable/cypher-query-lang.html
  4. 还要检查这个如何编写优化查询 http://www.slideshare.net/neo4j/optimizing-cypher-32550605

答案 2 :(得分:1)

这似乎已经解决了。 匹配(t:时间) - [:Rel] - (o:Espresso) - [:Rel] - &gt;(l:位置)&lt; - [:Rel] - (p:Espresso {id:&#34; ttt& #34;}) - [:Rel] - &gt; t与DISTINCT o,p,t,l MATCH(o) - (大鼠:评级) - (p)RETURN DISTINCT o.id as otherId,l.location作为位置,t.start作为开始,t.day作为日

感谢