【Neo4j查詢優化系列】如何快速統計節點的關系數


在圖數據庫中我們經常需要統計節點上的關系數目。一種常見的查詢寫法是這樣的:

MATCH (n:Person {name:‘Keanu Reeves’})-[]-() RETURN count(*);

上面的查詢會返回代表基諾-李維斯的節點(節點標簽為Person)上所有關系的總數,包括進入的和流出的關系。如果用PROFILE來看一下查詢的執行步驟和成本,結果如下:

relcount1.jpg

我們看到在統計節點擁有的關系數目時,產生8次dbhits,以及執行count()產生的EagerAggregation操作。查詢結果告訴我們該節點有7個關系。

事實上,Neo4j數據庫在保存關系時會同時更新相關節點的關系計數器,該計數器保存在數據庫中並和節點相關聯。我們其實不需要真正讀出節點上的關系來統計它們的數量,而只要從關系計數器中讀取當前的數值即可。參見下面的查詢:

PROFILE MATCH (n:Person {name:‘Keanu Reeves’}) RETURN size((n)-[]-())

relcount2.jpg

從查詢計划中可以看出,讀取關系計數器的操作是通過調用GetDegree(node, relationshiptype, direction)完成的,而且只有1次dbhit,無論實際關系的數量有多少。這里,因為我們沒有指定關系類型和方向,第二個參數是None,第三個參數是BOTH。可以試試下面的查詢來幫助理解GetDegree的用法:

PROFILE MATCH (n:Person {name:‘Keanu Reeves’}) RETURN size((n)-[:ACTED_IN]->())

本文鏈接:https://blog.csdn.net/GraphWay/article/details/88100842


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM