Должны ли сравниваться узлы напрямую или они должны сначала пройти через ID ()? - PullRequest
3 голосов
/ 21 января 2020

У меня есть запрос 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 может скомпилировать их все в один и тот же план выполнения.

1 Ответ

2 голосов
/ 22 января 2020

Сравнение 2 узлов на (в) равенстве практически такое же, как сравнение их по собственному идентификатору. Разница в производительности, если таковая имеется, должна быть незначительной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...