Ich habe eine Tabelle mit Autoinkrement-Primärschlüssel. Diese Tabelle soll Millionen von Datensätzen speichern und ich muss vorerst nichts löschen. Das Problem ist, dass beim Einfügen neuer Zeilen aufgrund eines Fehlers die Autoinkrementtaste einige Lücken in den Autoinkrement-IDs zurücklässt. Beispielsweise ist die nächste ID nach 5 die 8 und lässt die Lücke von 6 und 7 Ergebnis davon ist, wenn ich die Zeilen zähle, ergibt es 28000, aber die maximale ID ist 58000. Was kann der Grund sein? Ich lösche nichts. Und wie kann ich dieses Problem beheben?
P.S. Ich verwende Einfügen ignorieren beim Einfügen von Datensätzen, so dass es keinen Fehler gibt, wenn ich versuche, doppelten Eintrag in eindeutige Spalte einzufügen.
Dies ist per Entwurf und wird immer passieren.
Warum?
Nehmen wir 2 überlappende Transaktionen, die INSERTs ausführen
Dann
Wenn aufeinanderfolgende Werte garantiert wären, müsste jede Transaktion nacheinander erfolgen. Nicht sehr skalierbar.
Siehe auch Führen eingefügte Datensätze immer zusammenhängende Identitätswerte aus (SQL Server aber das gleiche Prinzip gilt)
Dies ist ein Problem in InnoDB, der Speicher-Engine von mySQL.
Es ist wirklich kein Problem wie
Wenn Sie die Dokumente überprüfen Ссылка
Im Grunde sagt InnoDB eine spezielle Tabelle, um die automatischen Inkremente beim Start zu machen
Und die Abfrage, die es verwendet, ist so etwas wie
%Vor%Dies verbessert die Parallelität, ohne dass dies Auswirkungen auf Ihre Daten hat.
Um dies nicht zu verwenden, verwenden Sie MyISAM anstelle von InnoDB als Speichermodul
Tags und Links mysql primary-key