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

2021-09-11 20:43:30 字數 695 閱讀 9776

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

match (n:person )--() return count(*);

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

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

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

profile match (n:person ) return size((n)--())

從查詢計畫中可以看出,讀取關係計數器的操作是通過呼叫getdegree(node, relationshiptype, direction)完成的,而且只有1次dbhit,無論實際關係的數量有多少。這裡,因為我們沒有指定關係型別和方向,第二個引數是none,第三個引數是both。可以試試下面的查詢來幫助理解getdegree的用法:

profile match (n:person ) return size((n)-[:acted_in]->())

neo4j查詢優化

1 使用match時,避免使用多個標籤。搜尋使用了2個標籤,同樣的事情竟然訪問了資料庫801次。這是因為cypher執行了額外的 haslabel 過濾器。可以通過使用專門的關係型別來解決這樣的問題,比如為他們新增published和drafted關係,然後用關係來找到指定使用者的published...

Neo4j 空間查詢

1.neo4j自帶函式進行簡單計算 neo4j自帶distance point1,point2 函式,返回乙個浮點數,表示同一座標參照系中兩點之間的測地距離,可以使用round函式來進行四捨五入。目前neo4j3.3版本不支援return直接返回point型別,3.4版本可以。節點型別 節點格式 詳...

neo4j 查詢cypher話語

engine.execute start n node people return n params skip和limit的數字引數12 345mapparams new hashmap params.put s 1 params.put l 1 executionresult result eng...