Как neo4j выполняет МАТЧ?

#neo4j #graph-databases

Вопрос:

Для поиска узла, удовлетворяющего шаблону, выполняет ли neo4j DFS/BFS по всему графику, если предположить, что структура индекса недоступна?

Например, учитывая следующий запрос:

 MATCH (movie:Movie)
RETURN movie.title
 

На мой взгляд, если мы не храним список фильмов, нам нужно просмотреть все узлы, чтобы ответить на этот запрос.

Другим примером является следующий запрос:

    MATCH (:Person {name: 'Oliver Stone'})--(movie:Movie) 
   RETURN movie.title
 

Для этого потребуется найти все узлы с именем «Оливер Стоун» и проверить каждый из них, подключены ли они к узлу фильма. Первый шаг потребует прохождения всех узлов Person.

Если бы вы могли связать меня с какой-либо документацией/кодом, это было бы здорово.

Ответ №1:

Вы можете предварить свои запросы PROFILE или EXPLAIN понять, что происходит под капотом: https://neo4j.com/docs/cypher-manual/current/query-tuning/how-do-i-profile-a-query/#how-do-i-profile-a-query

Планы выполнения покажут, используются ли/какие индексы, например

Комментарии:

1. Спасибо. Из планов запросов я только что нашел все операции запроса: neo4j.com/docs/cypher-manual/current/execution-plans/operators . Некоторым из них нужно пройти через все узлы.