2017-07-04 4 views
0

Wenn ich diese Chiffre Abfrage verwendetWie kann ich diese Abfrage optimieren?

match p=(n)-[r*8]-(n) 
where id(n)=548 
with p 
where ALL(x IN nodes(p)[1..length(p)] WHERE SINGLE(y IN nodes(p)[1..length(p)] WHERE x=y)) 
return count(p) 

es 51.922 ms nahm das Ergebnis zurück; es ist wirklich eine lange Zeit. Wie kann ich diese Abfrage optimieren? Jede Hilfe wäre willkommen.

Antwort

0

Sieht so aus, als ob Sie eine einfache Schaltung ohne sich wiederholende Knoten (mit Ausnahme des Start- und Endknotens) möchten.

Es gibt eine APOC Procedure, um alle einfachen Pfade zwischen zwei Knoten mit einer maximalen Pfadlänge zu erhalten. Es funktioniert derzeit nicht, wenn der Start- und der Endknoten identisch sind, aber wenn wir den Endknoten als einen benachbarten Knoten zu Ihrem Startknoten festlegen und filtern, um nur Pfade der Länge 7 beizubehalten (da die Pfade den letzten Sprung zurück enthalten) zum Startknoten), dann sollten wir in der Lage sein, die richtige Antwort extrem schnell zu bekommen.

match (n)--[m] 
with distinct n, m 
call apoc.algo.allSimplePaths(n, m, '', 7) YIELD path 
with path 
where length(path) = 7 
return count(path) 
Verwandte Themen