2016-08-02 26 views
0

Angenommen, es gibt 1.000 Tabellen in einer Datenbank und jede Tabelle hat 1.000 Zeilen. Wenn ich in diesen 1.000 Tabellen nach einer einzelnen Tabelle suche, ist die Suchzeit die gleiche wie für die Suche nach Daten in einer der Tabellen?Welche ist schneller in SQL: Suche nach einer Tabelle oder Suche nach Daten in der Tabelle?

Mit anderen Worten, verwendet SQL den gleichen Suchalgorithmus, um eine Tabelle aus 1.000 Tabellen zu finden, wie es Daten aus einer Tabelle mit 1.000 Zeilen erhält?

+1

Wie würden Sie nach einer Tabelle suchen? 'Wählen Sie * aus information_schema.tables'? Eine Tabelle ist eine Tabelle ist eine Tabelle. – JNevill

+1

Wenn Sie über 1000 Tabellen mit derselben Struktur verfügen, müssen Sie den Datenbankentwurf lesen. Wenn Sie nicht wissen, aus welcher Tabelle Sie Daten abrufen möchten, weil sie unterschiedlich sind, müssen Sie sich besser mit Ihrem Datenbankentwurf vertraut machen, und Sie sind nicht qualifiziert, diese abzufragen, bis Sie wissen, was jede Tabelle tut und die Bedeutung versteht der Daten. Normalerweise schreiben Sie keine Abfragen, um nach Tabellen zu suchen. – HLGEM

+0

Ich würde wetten, dass Sie einen rooky Fehler in Ihrem Datenbankentwurf gemacht haben. Warum möchten Sie nach einer Tabelle suchen, bitte erläutern Sie – RiggsFolly

Antwort

2

Nein, MySQL verwendet nicht den gleichen Suchalgorithmus, um eine Tabelle zu finden.

MySQL verwaltet ein "Datenwörterbuch" im Arbeitsspeicher. Wenn Sie also eine Abfrage ausführen, die eine bestimmte Tabelle angibt, sucht sie diese Tabelle sehr schnell. Es ist viel schneller für MySQL, eine Tabelle zu identifizieren, als nach Daten in einer Tabelle zu suchen. Zum Beispiel haben die Datenbankserver, die ich bei meinem Job betreue, mehr als 150.000 Tabellen, und das ist kein Problem.

Bedeutet dies, dass Sie Ihre Daten über viele Tabellen aufteilen sollten, damit sie schneller laufen? Nein - das ist normalerweise kein guter Kompromiss. Es macht Ihren Anwendungscode komplexer, da Ihr Code auswählen muss, welche Tabelle abgefragt werden soll. Sie können auch Fälle finden, in denen die Daten in einer Tabelle gespeichert werden sollen, wenn Sie in vielen Ihrer Tabellen nach Ergebnissen suchen müssen.

Hier sind ein paar Prinzipien zu folgen: „sollte alles so einfach wie möglich gemacht werden, aber nicht einfacher“

(attributed to Albert Einstein)

"Zuerst machen Sie es, dann machen Sie es richtig, und schließlich machen Sie es schnell." (Stephen C. Johnson und Brian W. Kernighan, 1983)

+0

. . Warum ist die Zeit im Wesentlichen nicht die gleiche wie die Zeit, um einen Datensatz in einer Tabelle ähnlicher Größe zu finden, indem ein Primärschlüssel verwendet wird, wenn sich die Daten im Speicher befinden? –

+0

Danke ..... das war die Antwort, die ich brauchte – AJchandu

+0

@GordonLinoff, die Suche nach einem Primärschlüssel ist eine B-Baum Traversal, mit O (log n) Komplexität. Das Durchsuchen eines Hash-Indexes von Tabellen ist O (1) -Komplexität. –