制限付きフィルターをクエリのできるだけ早い段階で配置する
すべてのシナリオで、クエリへのフィルターの早期配置は、クエリプランが考慮する必要がある中間ソリューションを減らすのに役立ちます。つまり、クエリの実行に必要なメモリとコンピューティングリソースが少なくなります。
次の例は、これらの影響を理解するのに役立ちます。India に住むすべてのユーザーを返すクエリを記述するとします。クエリの 1 つのバージョンは次のとおりです。
MATCH (n)-[:lives_in]->(city)-[:part_of]->(country) WITH country, collect(n.firstName + " " + n.lastName) AS result WHERE country.name = 'India' RETURN result
上記のバージョンのクエリは、このユースケースを達成するための最適な方法ではありません。フィルター country.name = 'India' はクエリパターンの後半に表示されます。まず、すべての人物とその住んでいる場所を収集し、国ごとにグループ化してから、country.name = India のグループのみをフィルタリングします。India に住んでいるユーザーのみをクエリし、収集集約を実行する最適な方法です。
MATCH (n)-[:lives_in]->(city)-[:part_of]->(country) WHERE country.name = 'India' RETURN collect(n.firstName + " " + n.lastName) AS result
原則として、変数の導入後できるだけ早くフィルターを配置します。