Diese beiden hypothetischen Cypher-Abfragen das gleiche Ergebnis: equalsWarum sollte ich die exist() -Funktion für Musterexistenz verwenden?
MATCH(s:Start)
WHERE exists((s)-[:CONNECTED_TO]->(:End))
RETURN s
und
MATCH(s:Start)
WHERE (s)-[:CONNECTED_TO]->(:End)
RETURN s
Der einzige Unterschied besteht darin, dass die zweite Abfrage kein Aufruf an die exists() Funktion hat, aber semantisch diese beiden Abfragen sind . Recht?
Also, warum und wann sollte ich die exists()
Funktion verwenden, die ein Muster als Parameter übergibt?
EDIT:
ich einige Unterschiede in der Ausgabe von PROFILE
Beachtet:
PROFILE MATCH(s:Start)
WHERE exists((s)-[:CONNECTED_TO]->(:End))
RETURN s
+------------------+----------------+------+---------+-----------+-----------------------------------------------+
| Operator | Estimated Rows | Rows | DB Hits | Variables | Other |
+------------------+----------------+------+---------+-----------+-----------------------------------------------+
| +ProduceResults | 2 | 1 | 0 | s | s |
| | +----------------+------+---------+-----------+-----------------------------------------------+
| +Filter | 2 | 1 | 5 | s | NestedExpression(Filter-Expand(All)-Argument) |
| | +----------------+------+---------+-----------+-----------------------------------------------+
| +NodeByLabelScan | 3 | 3 | 4 | s | :Start |
+------------------+----------------+------+---------+-----------+-----------------------------------------------+
Total database accesses: 9
PROFILE MATCH(s:Start)
WHERE (s)-[:CONNECTED_TO]->(:End)
RETURN s
+------------------+----------------+------+---------+-------------------------+-------------------------+
| Operator | Estimated Rows | Rows | DB Hits | Variables | Other |
+------------------+----------------+------+---------+-------------------------+-------------------------+
| +ProduceResults | 2 | 1 | 0 | s | s |
| | +----------------+------+---------+-------------------------+-------------------------+
| +SemiApply | 2 | 1 | 0 | s | |
| |\ +----------------+------+---------+-------------------------+-------------------------+
| | +Filter | 1 | 0 | 1 | anon[29], anon[47], s | anon[47]:End |
| | | +----------------+------+---------+-------------------------+-------------------------+
| | +Expand(All) | 1 | 1 | 4 | anon[29], anon[47] -- s | (s)-[:CONNECTED_TO]->() |
| | | +----------------+------+---------+-------------------------+-------------------------+
| | +Argument | 3 | 3 | 0 | s | |
| | +----------------+------+---------+-------------------------+-------------------------+
| +NodeByLabelScan | 3 | 3 | 4 | s | :Start |
+------------------+----------------+------+---------+-------------------------+-------------------------+
Total database accesses: 9
Ich bemerkte einige Unterschiede in der Ausgabe von 'PROFILE' dieser Abfragen (siehe meine Bearbeitung). Die Abfrage mit 'exists()' hat einen kompakteren Ausführungsplan. –