2017-03-17 4 views
1
私は両方のクエリを実行し、同じ結果を得た

のNeo4jはないVSが

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

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

を実行しているとの違いは何

、パフォーマンスまたは何か他のものの違いであるnullで存在していますか?

+0

'exists()'は検索ですが、 'foo'がnullであるため短絡しています。 'IS NULL'はちょうど比較です。 – EJP

+0

いずれのアイデアがより速くなるべきか? –

+0

比較は明らかですが、わかりやすい最適化が適用されていればそれを測定することはできません。それはネットワーク送信時間によって支配されます。 – EJP

答えて

2

はのは、小さな例のデータセットを作成してみましょう:

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

私たちは、実行計画と各ステップの行数を表示するためにPROFILEを使用しています。クエリMATCH (n) WHERE NOT exists(n.foo) RETURN nについて

:クエリMATCH (f) WHERE f.foo IS NULL RETURN fについて

enter image description here

enter image description here

実行計画を示すこと(処理工程間を移動する)実際の行数と数のデータベースのヒット数は同じです。フィルタの条件は少し異なりますが、私は大きな違いは期待できません。実行時間はディスクアクセスによって支配され、EJPがコメントしたようにネットワーク伝送によって支配される可能性があります。もちろん、より大きなデータセットでベンチマークを実行する必要があります。

関連する問題