Ich habe eine MySQL InnoDB-Tabelle mit 1.000.000 Datensätzen. Ist das zu viel? Oder Datenbanken können damit und mehr umgehen? 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.
quelle
Ich habe eine Datenbank mit mehr als 97.000.000 Datensätzen ( 30 GB Datendatei ) und habe kein Problem.
Denken Sie daran , zu definieren und verbessern Sie Ihre Tabelle Index .
Es ist also offensichtlich, dass 1.000.000 nicht VIELE sind! (Aber wenn Sie nicht indizieren; ja, es ist VIELE)
quelle
Verwenden Sie 'EXPLAIN', um Ihre Abfrage zu untersuchen und festzustellen, ob mit dem Abfrageplan etwas nicht stimmt.
quelle
EXPLAIN
- Neulinge oder nicht.EXPLAIN
;)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 Probleme, die schwierig (oder schwieriger) sind:
Wie groß ist der Arbeitssatz (dh 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 das Problem tatsächlich leicht zu lösen.
Welches Maß an Parallelität ist erforderlich? Gibt es nur einen Benutzer, der einfügt / liest, oder arbeiten viele tausend Clients gleichzeitig?
Welches Maß an Versprechen / Haltbarkeit und Leistungskonsistenz ist erforderlich? Müssen wir sicherstellen, dass wir jedes Engagement 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-optimization- und-Sechs-Sigma / ).
Müssen Sie betriebliche Probleme ausführen, 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 (Blockierung aller Verbindungen).
Also werde ich sagen, dass die zwei einschränkenden Probleme sein werden:
quelle
Wenn Sie 1 Million Zeilen meinen, hängt dies 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 sogar eine Entwicklungsdatenbank für anständige Geräte.
Wenn Sie 1 Million Spalten meinen (nicht sicher, ob dies in MySQL überhaupt möglich ist), dann scheint dies ein bisschen groß zu sein und wird wahrscheinlich Probleme verursachen.
quelle
Registrieren? Meinst du Rekord?
Eine Million Datensätze sind heutzutage keine große Sache für eine Datenbank. Wenn Sie auf ein Problem stoßen, ist es wahrscheinlich nicht das Datenbanksystem selbst, sondern die Hardware, auf der Sie es ausführen. Sie werden höchstwahrscheinlich nicht auf ein Problem mit der Datenbank stoßen, bevor Ihnen die Hardware ausgeht, um darauf zu werfen.
Offensichtlich sind einige Abfragen langsamer als andere, aber wenn zwei sehr ähnliche Abfragen zu sehr unterschiedlichen Zeiten ausgeführt werden, müssen Sie den Ausführungsplan der Datenbank herausfinden und dafür optimieren, dh korrekte Indizes, ordnungsgemäße Normalisierung usw. verwenden.
Übrigens gibt es in einer Tabelle keinen "letzten" Datensatz, logischerweise haben sie keine inhärente Reihenfolge.
quelle
SELECT LAST_INSERT_ID()
statt dieser Abfrage.Ich habe nicht partitionierte Tabellen mit mehreren Milliarden (indizierten) Datensätzen gesehen, die für analytische Arbeiten selbst verbunden wurden. 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 :)
quelle
Angenommen, Sie meinen "Datensätze" mit "Registern". 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 haben.
Offensichtlich sind Suchanfragen jedoch langsamer. Daran führt kein Weg vorbei, außer sicherzustellen, dass die Felder ordnungsgemäß indiziert sind.
quelle
Je größer die Tabelle wird (wie in mehr Zeilen), desto langsamer werden normalerweise Abfragen ausgeführt, wenn keine Indizes vorhanden sind. Sobald Sie die richtigen Indizes hinzugefügt haben, sollte sich Ihre Abfrageleistung verbessern oder zumindest nicht so stark verschlechtern, wie die Tabelle wächst. Wenn die Abfrage selbst jedoch mehr Zeilen zurückgibt, wenn 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 Speicher zwischengespeichert zu werden, sind die Abfragen langsamer.
quelle
Die Verwendung der bereitgestellten Abfrage ist aufgrund der Verwendung einer Sortierzusammenführungsmethode zum Sortieren der Daten außergewöhnlich langsam.
Ich würde empfehlen, das Design zu überdenken, damit Sie Indizes verwenden, um es abzurufen, oder sicherzustellen, dass es bereits auf diese Weise bestellt wurde, sodass keine Sortierung erforderlich ist.
quelle