2016-04-13 4 views
1

Ich habe eine riesige Datenbanken mit 200K bis ~ 1M Dateipfade (das sind alle Dateien auf einem Hub-Server gespeichert).Finden Sie Verzeichnisinhalt mit einer Zeichenfolge, die den vollständigen Pfad vieler Dateien mit einer SQL-Anfrage enthält

Ich entwickle eine Anwendung, die einen Baum dieser Verzeichnisse und Dateien druckt, damit Benutzer die Dateien auswählen können, die sie vom Server herunterladen möchten.

Problem: wenn ich auf meine "+" Schaltfläche klicke, um einen Verzeichnisinhalt anzuzeigen, muss ich alle meine Tabelle analysieren und prüfen, ob jeder Pfad zu meinem Verzeichnis gehört.

Das dauert viel zu viel Zeit. (8s pro Verzeichnis auf dem kleinsten Server) Wie soll ich das minimieren? Gibt es eine Möglichkeit, meine Pfade alphabetisch sortiert zu halten, damit ich die gesamte Tabelle nicht analysieren kann?

Vielen Dank im Voraus, José Todeschini.

Antwort

0

Sie sollten Index Ihren Weg (oder noch besser der Primärschlüssel machen) und suchen Sie wie folgt aus:

SELECT * 
FROM  mytable 
WHERE path LIKE '/var/public/a/b/c/%' 

Beachten Sie, dass dies eine String-Konstante sein sollte, einschließlich der Prozentzeichen, sonst wird der Index nicht verwendet werden.

+0

Es muss nicht der Primärschlüssel sein, aber da jeder Pfad nur einmal existiert, kann er ein eindeutiger Index sein. Sollte in der gleichen Leistung führen –

+0

LIKE "/ var /%" gibt mir alle Dateien in/var/sogar in allen untergeordneten Verzeichnissen enthalten. Ich brauche nur die Dateien direkt in/var/und den Unterverzeichnissen. Ist es möglich, LIKE "/ var /% 'no- /'" für Dateien zu machen? Und wie sollte ich für Sub-Dirs tun? –

+0

@Markus: Wenn es sich nicht um einen Primärschlüssel handelt, ist eine zusätzliche Primärschlüssel-Suche erforderlich. – Quassnoi

Verwandte Themen