СУБД Neo4j: шифр предложение Where и фигурные скобки в пункте матч - что лучше?


Я новичок в Neo4J,и последние несколько дней изучал язык запросов Cypher.

Я понял, что могу написать свой запрос так...

MATCH (b:Beverage)<-[:likes]-(p:Person)-[:likes]->(r:Restaurant) 
WHERE b.name = 'Beer' and r.name = 'KFC'
RETURN p.name

... или вот так...

MATCH (b:Beverage{name:'Beer'})<-[:likes]-(p:Person)-[:likes]->(r:Restaurant{name:'KFC'}) 
RETURN p.name

Какой подход лучше с точки зрения производительности? И почему?

Спасибо.

1 14

1 ответ:

Мне очень жаль, но ответ @A-rodin здесь неверен: оба ваших утверждения приводят к одному и тому же плану запроса. Это можно проверить, добавив в оператор префикс EXPLAIN и сравнив планы запросов.

Для удобства чтения я бы структурировал запрос:

MATCH (p:Person)-[:likes]->(b:Beverage{name:'Beer'}),
      (p)-[:likes]->(r:Restaurant{name:'KFC'}) 
RETURN p.name

Здесь запрос читается как предложение на простом английском языке "соответствовать человеку, который любит пиво и любит рестораны KFC".