查询性能 - 四种关系

时间:2014-07-14 11:26:53

标签: neo4j cypher

我的图表问题是: “哪个球员最常互相对抗”

我跟随Cypher询问:

match (p:Player)-[:PLAYS_IN]->(t:Team)-[:PLAYED]->(g:Game)<-[:PLAYED]-(tt:Team)<-[:PLAYS_IN]-(pp:Player) 
USING SCAN p:Player USING SCAN pp:Player  
return p.Lastname, pp.Lastname, count(pp) order by count(pp) desc limit 100;

数量 球员:158310 游戏:215068 战队:218960

堆是6G,CPU是4核。

此查询确实需要数小时但尚未完成。 我应该如何优化它?

谢谢, 迈克尔

1 个答案:

答案 0 :(得分:1)

我猜你可以通过首先找到哪些球队相互比赛最多并且根据球员找到球员来简化问题。我不确定这个假设是否过分简化了问题。

match (t:Team)-[:PLAYED]->(g:Game)<-[:PLAYED]-(tt:Team)
with t, tt order by count(g) desc limit 1
match  (p:Player)-[:PLAYS_IN]->(t:Team)-[:PLAYED]->(g:Game)<-[:PLAYED]-(tt:Team)<-[:PLAYS_IN]-(pp:Player) 
return p.Lastname, pp.Lastname, count(pp) order by count(pp) desc limit 100;