本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在變數長度路徑 (VLP) 表達式中,將更嚴格的節點放在左側
在可變長度路徑 (VLP) 查詢中,查詢引擎會選擇在表達式的左側或右側啟動周遊來最佳化評估。決策是根據左側和右側模式的基數。Cardinality 是符合指定模式的節點數量。
-
如果右側模式的基數為 1,則右側將是起點。
-
如果左側和右側的基數為 1,則會檢查兩側的擴展,並以較小的擴展從側面開始。擴充是 VLP 表達式左側節點和右側節點的傳出或傳入邊緣數量。只有在 VLP 關係是單向且提供關係類型時,才會使用最佳化的此部分。
-
否則,左側將是起點。
對於 VLP 表達式鏈,此最佳化只能套用至第一個表達式。從左側開始評估其他 VLPs。例如,讓 (a)、(b) 的基數為 1,而 (c) 的基數大於 1。
-
(a)-[*1..]->(c)
:評估開頭為 (a)。 -
(c)-[*1..]->(a)
:評估開頭為 (a)。 -
(a)-[*1..]-(c)
:評估開頭為 (a)。 -
(c)-[*1..]-(a)
:評估開頭為 (a)。
現在讓 (a) 的傳入邊緣為兩個,(a) 的傳出邊緣為三個,(b) 的傳入邊緣為四個,(b) 的傳出邊緣為五個。
-
(a)-[*1..]->(b)
:評估以 (a) 開頭,因為 (a) 的傳出邊緣小於 (b) 的傳入邊緣。 -
(a)<-[*1..]-(b)
:評估以 (a) 開頭,因為 (a) 的傳入邊緣小於 (b) 的傳出邊緣。
一般而言,請將更嚴格的模式放在 VLP 表達式的左側。