本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
openCypher 中的 WITH 子句充當邊界,在執行之前,所有項目都會先執行,然後將產生的值傳遞給查詢的剩餘部分。當您需要臨時彙總或想要限制結果數量時,需要 WITH 子句,但除了應該避免使用 WITH 子句之外。一般指引是移除這些簡單的 WITH 子句 (不彙總、排序或限制),讓查詢規劃器能夠處理整個查詢,以建立全域最佳計劃。例如,假設您撰寫了查詢,以傳回 中的所有人員India
:
MATCH (person)-[:lives_in]->(city)
WITH person, city
MATCH (city)-[:part_of]->(country {name: 'India'})
RETURN collect(person) AS result
在上述版本中, WITH 子句會限制在 之前置放模式 (city)-[:part_of]->(country {name: 'India'})
(較嚴格)(person)-[:lives_in]->(city)
。這會使計劃次佳。此查詢的最佳化是移除 WITH 子句,並讓規劃器運算最佳計劃。
MATCH (person)-[:lives_in]->(city)
MATCH (city)-[:part_of]->(country {name: 'India'})
RETURN collect(person) AS result