Neo4j: Cypher WHERE Clause vs. Curly Braces в пункте MATCH - что лучше?

Я новичок в 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

Прошу прощения, но ответ @a-rodin здесь неправильный: оба ваших заявления приводят к такому же тарифному плану. Вы можете убедиться, что путем префикса инструкции с помощью EXPLAIN и сравнения планов запросов.

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

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

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