簡體   English   中英

Neo4j Cypher性能的可選匹配

[英]Neo4j Cypher Performance of Optional Match

我正在嘗試編寫一個查詢,以計算按投票所屬州分組的選舉的總票數。 我希望即使有0票,也能返回所有州。 以下查詢使用可選的match返回所有狀態,而不管是否已投票。

MATCH (state:State)
OPTIONAL MATCH (state)<-[:FROM]-(:User)-[:CAST]->(vote:Vote)-[:FOR]->(:Election{id:'ABC123'})
RETURN state, count(vote)

在3064ms內返回50行

如果刪除可選匹配項,查詢的性能會更好:

MATCH (state:State),(state)<-[:FROM]-(:User)-[:CAST]->(vote:Vote)-[:FOR]->(:Election{id:'ABC123'})
RETURN state, count(*)

在406毫秒內返回49行

我的問題是

  1. 為什么兩個查詢之間的性能如此巨大的差異?

  2. 有沒有更好的方法來構造查詢以提高性能並仍然滿足要求?

使用Union語句怎么辦?:

比賽(狀態:s)
返回
UNION MATCH(s:State)<-[:FROM]-(:User)-[:CAST]->(vote:Vote)-[:FOR]->(:Election {id:'ABC123'})RETURN s ,計數(票)

我認為由於對count(vote)操作進行可選匹配的機制,您的查詢可能花費了很長時間。 我不確定是否會更快,但是可能值得嘗試。

聯盟文件
可選的比賽文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM