У меня есть запрос Cypher, в котором перечислены все файлы, которые имеют хотя бы одно соединение с другим отделом. В настоящее время это можно сделать двумя способами:
- Сравнение узлов напрямую.
MATCH (d1:Department)-[:BELONG_TO]-(n1:File)-[:DATA_LINK]-(n2:File)-[:BELONG_TO]-(d2:Department)
WHERE d1 <> d2
RETURN n1.name
- Сравнение узлов через
ID()
.
MATCH (d1:Department)-[:BELONG_TO]-(n1:File)-[:DATA_LINK]-(n2:File)-[:BELONG_TO]-(d2:Department)
WHERE ID(d1) <> ID(d2)
RETURN n1.name
Результат запроса пока тот же . Первый способ выглядит аккуратнее, а второй - более строгим.
Вопрос: есть ли разница в производительности в любом из подходов, особенно в первом? Например, Neo4j может иметь sh свойства узлов перед сравнением. Но, применяя микрооптимизацию, Neo4j может скомпилировать их все в один и тот же план выполнения.