我有這樣的查詢我的應用程序的一個關鍵組成部分:爲什麼這兩個看似相同的Cypher查詢在速度上差別如此之大?
MATCH (group:GroupType)
WHERE group.Name = "String"
MATCH (node:NodeType)
WHERE (node)-[:MEMBER_OF]->(group)
RETURN node
上有:GroupType(Name)
指數在此查詢使用近100萬的數據庫訪問大約10,000個元素的數據庫。下面是該查詢的PROFILE
:
然而,其執行相同的搜索查詢的該輕微的變化要快得多:
MATCH (group:GroupType)
WHERE group.Name = "String"
MATCH (node:NodeType)-[:MEMBER_OF]->(group)
RETURN node
唯一的區別是所述node:NodeType
匹配,並且關係匹配合併爲一個MATCH
而不是MATCH ... WHERE
。此查詢使用先前查詢的數據庫命中1/70和快10倍以上,儘管執行相同的搜索:
我想暗號處理MATCH ... WHERE
語句作爲單個搜索表達式,因此兩個查詢應編譯爲相同的操作,但這兩個查詢似乎執行的操作大不相同。爲什麼是這樣?
因此,如果查詢執行速度比它應該慢,我們應該嘗試通過試驗和錯誤的變化,直到我們到達在我們的Neo4j版本上足夠高效的查詢? – slbelden
@slbelden是的。我還建議在查詢中添加'CYPHER'以確保接收它的Neo4j與您正在使用的語法兼容。 (安全事物)大量使用Profile分析需要經常運行的查詢。 –
Tezra
作爲一個方面說明,我想補充一點,我只是通過升級我使用的Neo4J版本來改進我的一些Cyphers的一個數量級。 (根本沒有任何密碼變化......我使用'(a) - [* .. 10] - >(b)'通常用於追蹤事物的方式) – Tezra