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)