2016-04-07 8 views
1

Ich habe nur eine sehr einfache Frage zu stellen. Nehmen wir das Beispiel Filmdatenbank zur Verfügung gestellt von Neo4j und die folgenden zwei Abfragen:MATCH-Klausel mit Filtereigenschaften oder MATCH mit einer WHERE-Klausel?

MATCH (n:Person)-[:ACTED_IN]->(m:Movie {title:"The Matrix"}) 
RETURN n,m 

und

MATCH (n:Person)-[:ACTED_IN]->(m:Movie) 
WHERE m.title = "The Matrix" 
RETURN n,m 

Sind die beiden Abfragen rechnerisch äquivalent oder ist es der Fall, dass der erste Fall ist effizienter?

So wie ich es sehe, scheint MATCH im ersten Fall den angeforderten Teilgraphen "on-the-fly" zu erzeugen, während er den ursprünglichen Graphen durchläuft. Im zweiten Fall wird jedoch ein größerer Sub-Graph von MATCH erzeugt, der dann auf den angeforderten reduziert wird, sobald die redundanten Knoten gefiltert sind, nicht wahr? Kann irgendjemand diese Annahme irgendwie bestätigen, oder ist es falsch?

Antwort

1

Wenn Sie Ihre Version von neo4j einchecken möchten, wenn diese Abfragen identisch sind, sollten Sie die profile Anweisung verwenden. Hier finden Sie weitere Informationen http://neo4j.com/docs/stable/how-do-i-profile-a-query.html

+0

Danke Evgen. Das war sehr hilfreich. Es sieht so aus, als würden die beiden Abfragen die gleiche Arbeit leisten. Die Filterung wird priorisiert, um die Erzeugung redundanter Ergebnisse während der Verarbeitung der Abfrage zu vermeiden. –