2017-03-17 23 views
1

什麼是運行的Neo4j不存在VS是空

MATCH (n) WHERE NOT exists(n.foo) RETURN n 

MATCH (f) WHERE f.foo IS NULL RETURN f 

我跑了兩個查詢,並得到了相同的結果之間的差異,是在性能上還是其他什麼東西有什麼區別?

+0

'存在()'是一個搜索,儘管它會被短路,因爲'foo'爲空。 'IS NULL'只是一個比較。 – EJP

+0

任何想法哪一個應該更快? –

+0

明顯的比較,但我懷疑如果應用明顯的優化,您將能夠測量它。它將以網絡傳輸時間爲主。 – EJP

回答

2

讓我們創建一個小例子集:

CREATE (n1 {foo: 'bar'}), (n2) 

我們使用PROFILE顯示執行計劃和行的每個步驟中的號碼。

對於查詢MATCH (n) WHERE NOT exists(n.foo) RETURN n

enter image description here

對於查詢MATCH (f) WHERE f.foo IS NULL RETURN f

enter image description here

執行計劃表明,實際的行數(在處理步驟之間行進)和數的數據庫命中是相同的。過濾條件有些不同,但我不希望有任何顯着差異 - 執行時間可能會受磁盤訪問控制,並且正如EJP評論的那樣,通過網絡傳輸。當然,可以肯定的是,你必須在更大的數據集上運行基準測試。