neo4j CYPHER - Запрос отношения не заканчивается

В базе данных объемом 14 ГБ у меня есть несколько связей CITES:

MATCH p=()-[r:CITES]->() RETURN count(r)

91

Тем не менее, когда я бегу

MATCH ()-[r:CITES]-() RETURN count(r)

он загружается вечно и в конечном итоге вылетает при перезагрузке окна браузера (рабочий стол neo4j)

2 ответа

Решение

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

Шаблон, используемый для первого запроса, таков, что планировщик найдет этот счетчик в хранилище подсчетов, транзакционно обновленном хранилище подсчетов различных вещей. Это быстрый поиск в постоянном времени.

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

Что касается того, что это возвращает, то на самом деле оно должно быть в два раза больше: отношений CITIES на вашем графике, поскольку без направления на отношения каждое отдельное отношение будет найдено дважды, поскольку один и тот же путь с начальным и конечным узлами переключается соответствовать данному шаблону.

Neo4j всегда выбирает узлы в качестве начальных точек для выполнения запроса. В вашем запросе, вероятно, механизм запросов касается всего графика, поскольку вы не добавляете ограничений на свойства узла, метки и т. Д.

Я думаю, что вы должны указать метку хотя бы в вашем первом узле в шаблоне.

MATCH (:Article)-[r:CITES]-() RETURN count(r)
Другие вопросы по тегам