Как избежать продукта в запросе Neo4J Cypher? - PullRequest
0 голосов
/ 22 апреля 2020

У меня следующий запрос Neo4J Cypher:

MATCH (u:User{uid:'1819228'}), 
(ctx:Context)-[:BY]->(u) 
WITH DISTINCT ctx, u 
MATCH (s:Statement)-[:IN]->(ctx), 
(s)-[:BY]->(u) 
RETURN DISTINCT s, ctx 
ORDER BY s.timestamp ASC;

У меня такое ощущение, что что-то здесь неэффективно, потому что оно работает довольно медленно. Это случай создания продукта с несколькими результатами запроса?

Как лучше всего оптимизировать этот запрос, чтобы получить результаты в той же форме?

1 Ответ

0 голосов
/ 22 апреля 2020

Это может быть быстрее (и вам может не потребоваться DISTINCT):

MATCH (u:User)<-[:BY]-(s:Statement)-[:IN]->(ctx:Context)-[:BY]->(u)
WHERE u.uid = '1819228'
RETURN DISTINCT s, ctx 
ORDER BY s.timestamp;

Вы также можете создать index (или ограничение уникальности , который автоматически создает индекс) на :User(uuid), который быстро найдет желаемый User для начала запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...