在變數長度路徑 (VLP) 表達式中,將更嚴格的節點放在左側 - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在變數長度路徑 (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 表達式的左側。