it-swarm.com.de

Wie viele Zeilen in einer Datenbank sind ZU VIEL?

Ich habe eine MySQL InnoDB-Tabelle mit 1.000.000 Datensätzen. Ist das zu viel Oder können Datenbanken damit umgehen und mehr? Ich frage, weil mir aufgefallen ist, dass einige Abfragen (z. B. das Abrufen der letzten Zeile aus einer Tabelle) in der Tabelle mit 1-Millon-Zeilen langsamer (Sekunden) sind als in einer mit 100.

80
Juanjo Conti

Ich habe eine MySQL InnoDB-Tabelle mit 1000000 Registern. Ist das zu viel

Nein, 1.000.000 Zeilen (AKA-Datensätze) sind nicht zu viel für eine Datenbank.

Ich frage, weil mir aufgefallen ist, dass einige Abfragen (zum Beispiel das Abrufen des letzten Registers einer Tabelle) in der Tabelle mit 1 Million Registern langsamer (Sekunden) sind als in einer mit 100.

In dieser Aussage gibt es eine Menge zu erklären. Die üblichen Verdächtigen sind:

  1. Schlecht geschriebene Abfrage
  2. Es wird kein Primärschlüssel verwendet, vorausgesetzt, es ist überhaupt ein Primärschlüssel in der Tabelle vorhanden
  3. Schlecht gestaltetes Datenmodell (Tabellenstruktur)
  4. Fehlende Indizes
108
OMG Ponies

Ich habe eine Datenbank mit mehr als 97.000.0 Datensätzen ( GB Datendatei) und habe kein Problem.

Denken Sie daran, Ihre Tabelle zu definieren und zu verbessern Index.

Es ist also offensichtlich, dass 1.000.0 nicht VIEL ist! (Aber wenn Sie nicht indizieren; ja, es ist VIELE)

59
amir beygi

Verwenden Sie "EXPLAIN", um Ihre Abfrage zu überprüfen und festzustellen, ob der Abfrageplan fehlerhaft ist.

17

Ich denke, dies ist ein weit verbreitetes Missverständnis - Größe ist nur ein Teil der Gleichung, wenn es um die Skalierbarkeit von Datenbanken geht. Es gibt andere schwierige (oder schwierigere) Probleme:

  • Wie groß ist die Arbeitsmenge (d. H. Wie viele Daten müssen in den Speicher geladen und aktiv bearbeitet werden). Wenn Sie nur Daten einfügen und dann nichts damit anfangen, ist es eigentlich ein leicht zu lösendes Problem.

  • Welches Maß an Parallelität ist erforderlich? Gibt es nur einen Benutzer, der etwas einfügt/liest, oder arbeiten viele tausend Clients gleichzeitig?

  • Welche Versprechen/Haltbarkeit und Leistungsbeständigkeit sind erforderlich? Müssen wir sicherstellen, dass wir jede Verpflichtung einhalten können? Ist es in Ordnung, wenn die durchschnittliche Transaktion schnell ist, oder möchten wir sicherstellen, dass alle Transaktionen zuverlässig schnell sind (Six Sigma-Qualitätskontrolle wie - http://www.mysqlperformanceblog.com/2010/06/07/ Performance-Optimierung-und-Six-Sigma / ).

  • Müssen Sie betriebliche Probleme beheben, z. B. das Tabellenschema ÄNDERN? In InnoDB ist dies möglich, aber unglaublich langsam, da häufig eine temporäre Tabelle im Vordergrund erstellt werden muss (wodurch alle Verbindungen blockiert werden).

Ich werde also die zwei einschränkenden Themen nennen:

  • Ihre eigene Fähigkeit, Abfragen zu schreiben/gute Indizes zu haben.
  • Wie viel Schmerz Sie ertragen können, wenn Sie auf ALTER TABLE-Anweisungen warten.
11
Morgan Tocker

Ich habe nicht partitionierte Tabellen mit mehreren Milliarden (indizierten) Datensätzen gesehen, die sich für Analysezwecke selbst verbunden haben. Wir haben das Ding schließlich aufgeteilt, aber ehrlich gesagt haben wir nicht so viel Unterschied gesehen.

Das heißt, das war in Oracle und ich habe dieses Datenvolumen in MySQL nicht getestet. Indizes sind dein Freund :)

3
Jé Queue

Wenn Sie 1 Million Zeilen meinen, dann hängt es davon ab, wie Ihre Indizierung durchgeführt wird und wie Ihre Hardware konfiguriert ist. Eine Million Zeilen ist keine große Menge für eine Unternehmensdatenbank oder gar eine Entwicklerdatenbank für anständige Geräte.

wenn Sie 1 Million Spalten meinen (ich bin mir nicht sicher, ob das überhaupt in MySQL möglich ist), dann scheint dies ein bisschen groß zu sein und wird wahrscheinlich Probleme verursachen.

3
GrayWizardx

Registrieren? Meinen Sie Rekord?

Eine Million Datensätze sind heutzutage keine große Sache für eine Datenbank. Wenn Sie auf ein Problem stoßen, liegt es wahrscheinlich nicht am Datenbanksystem selbst, sondern an der Hardware, auf der Sie es ausführen. Sie werden wahrscheinlich nicht auf ein Problem mit der Datenbank stoßen, bevor Ihnen die Hardware ausgeht, um darauf zu schießen.

Natürlich sind einige Abfragen langsamer als andere. Wenn jedoch zwei sehr ähnliche Abfragen zu sehr unterschiedlichen Zeiten ausgeführt werden, müssen Sie den Ausführungsplan der Datenbank ermitteln und ihn optimieren, d. H. Korrekte Indizes, ordnungsgemäße Normalisierung usw. verwenden.

Übrigens gibt es keinen "letzten" Datensatz in einer Tabelle, logisch gesehen haben sie keine inhärente Reihenfolge.

3
phoebus

Angenommen, Sie meinen "Datensätze" und "Register". Nein, es ist nicht zu viel. MySQL lässt sich sehr gut skalieren und kann so viele Datensätze aufnehmen, wie Sie auf Ihrer Festplatte Platz haben.

Offensichtlich sind Suchanfragen jedoch langsamer. Daran führt eigentlich kein Weg vorbei, außer dass sichergestellt wird, dass die Felder ordnungsgemäß indiziert sind.

2
Thomas Bonini

Die Verwendung der bereitgestellten Abfrage ist außergewöhnlich langsam, da zum Sortieren der Daten eine Sortier-Mergemethode verwendet wird.

Ich würde empfehlen, das Design zu überdenken, damit Sie es mithilfe von Indizes abrufen können, oder sicherzustellen, dass es bereits in dieser Reihenfolge angeordnet ist, sodass keine Sortierung erforderlich ist.

0
Louis

Je größer die Tabelle wird (wie in mehreren Zeilen), desto langsamer werden normalerweise Abfragen ausgeführt, wenn keine Indizes vorhanden sind. Sobald Sie die richtigen Indizes hinzugefügt haben, sollte sich die Abfrageleistung verbessern oder zumindest nicht mehr so ​​stark verschlechtern, wie die Tabelle wächst. Wenn die Abfrage selbst jedoch mehr Zeilen zurückgibt, während die Tabelle größer wird, wird erneut eine Verschlechterung festgestellt.

Während 1M Zeilen nicht so viele sind, hängt es auch davon ab, wie viel Speicher Sie auf dem DB-Server haben. Wenn die Tabelle zu groß ist, um vom Server im Arbeitsspeicher zwischengespeichert zu werden, sind die Abfragen langsamer.

0
jvilalta