1
什麼是運行的Neo4j不存在VS是空
MATCH (n) WHERE NOT exists(n.foo) RETURN n
和
MATCH (f) WHERE f.foo IS NULL RETURN f
我跑了兩個查詢,並得到了相同的結果之間的差異,是在性能上還是其他什麼東西有什麼區別?
什麼是運行的Neo4j不存在VS是空
MATCH (n) WHERE NOT exists(n.foo) RETURN n
和
MATCH (f) WHERE f.foo IS NULL RETURN f
我跑了兩個查詢,並得到了相同的結果之間的差異,是在性能上還是其他什麼東西有什麼區別?
讓我們創建一個小例子集:
CREATE (n1 {foo: 'bar'}), (n2)
我們使用PROFILE
顯示執行計劃和行的每個步驟中的號碼。
對於查詢MATCH (n) WHERE NOT exists(n.foo) RETURN n
:
對於查詢MATCH (f) WHERE f.foo IS NULL RETURN f
:
執行計劃表明,實際的行數(在處理步驟之間行進)和數的數據庫命中是相同的。過濾條件有些不同,但我不希望有任何顯着差異 - 執行時間可能會受磁盤訪問控制,並且正如EJP評論的那樣,通過網絡傳輸。當然,可以肯定的是,你必須在更大的數據集上運行基準測試。
'存在()'是一個搜索,儘管它會被短路,因爲'foo'爲空。 'IS NULL'只是一個比較。 – EJP
任何想法哪一個應該更快? –
明顯的比較,但我懷疑如果應用明顯的優化,您將能夠測量它。它將以網絡傳輸時間爲主。 – EJP