Próbuję dowiedzieć się, jak zoptymalizować szyfrzapytanie na bardzo dużym zbiorze danych. Próbuję znaleźć znajomych z drugiego lub trzeciego stopnia w tym samym mieście. Moje bieżące zapytanie o szyfrowanie trwa, co trwa 1 minutę:
match (n:User {id: 123})-[:LIVES_IN]->()<-[:LIVES_IN]-(u:User), (n)-[:FRIENDS_WITH*2..3]-(u) WHERE u.age >= 20 AND u.age <= 36 return u limit 100
Istnieje około 500 000 węzłów użytkownika i 500 milionówRelacje FRIENDS_WITH. Mam już indeksy właściwości id i wieku. Wydaje się, że zapytanie dławi się zgodnie z wymaganiem FRIENDS_WITH. Czy istnieje sposób na przemyślenie tego w inny sposób lub zoptymalizowanie szyfrowania, aby było to w czasie rzeczywistym (tj. Maksymalny czas 1-2 sekund)?
Oto profil zapytania:
Dzięki.
Odpowiedzi:
0 dla odpowiedzi № 1Utwórz indeks na właściwości id dla etykiety Użytkownik:
CREATE INDEX ON :User(id)
Więcej informacji można znaleźć w dokumentacji indeksów schematów http://neo4j.com/docs/stable/query-schema-index.html
Jeśli to nie pomoże dodać wyniku PROFIL zapytanie, a my możemy Ci pomóc
PROFILE MATCH ... rest of your query
Warto również spróbować przepisać zapytanie w następujący sposób:
MATCH (n:User {id: 123})-[:LIVES_IN]->()<-[:LIVES_IN]-(u:User),
(n)-[:FRIENDS_WITH*2..3]-(u)
WHERE u.age >= 20 AND u.age <= 36
return u limit 100