Низкая производительность Neo4j на ORDER BY - PullRequest
0 голосов
/ 04 марта 2020

У меня есть такой запрос

MATCH (p:Person)-[s:KNOWS]->(t:Person) WHERE s.state = "blocked"
WITH DISTINCT (t) AS user
SKIP 0
LIMIT 10
MATCH (user)<-[r:KNOWS { state: "blocked" }]-(p:Person)
RETURN user.username, SIZE(COLLECT(p.username)) as count

enter image description here

Первая проблема - когда у меня SKIP, например, 100, он становится медленнее, любая идея почему ?

Проблема с секундами заключается в том, что, когда я пытаюсь добавить ORDER BY, например ORDER BY p.createdAt, который является датой (индексированное поле), время ожидания всегда истекает.

1 Ответ

2 голосов
/ 04 марта 2020

У вас может быть лучшая производительность с настройкой исходного MATCH:

MATCH (t:Person) 
WHERE ()-[:KNOWS {state:"blocked"}]->(t)
WITH t AS user // no longer need DISTINCT here
...

Для повышения производительности вы можете рассмотреть возможность создания индекса полнотекстовой схемы on: KNOWS по их свойству состояния и используйте процедуру запроса полнотекстового индекса для этого начального поиска (предполагается, что отношения KNOWS всегда соединяют два: узлы Person).

...