auto increment primary verlassen Lücken in der Zählung
Ich habe eine Tabelle mit auto-increment primary key. Diese Tabelle gemeint ist, zum speichern von Millionen von Datensätzen und das brauche ich nicht alles löschen für jetzt. Das problem ist, wenn neue Zeilen werden immer eingefügt, weil einige Fehler, die auto-increment Schlüssel ist, verlassen einige Lücken in der auto-increment-ids.. z.B. nach 5, die nächste id ist 8, wodurch der Abstand von 6 und 7. Ergebnis dieser ist, wenn ich die Anzahl der Zeilen ergibt 28000, aber die max-id ist 58000. Was kann der Grund sein? Ich bin nicht das löschen nichts. Und wie kann ich dieses Problem lösen.
P. S. ich bin über "einfügen" ignorieren beim einfügen von Datensätzen, so dass es nicht geben Fehler wenn ich versuche, einfügen doppelten Eintrag in der unique-Spalte.
- mögliche Duplikate von stackoverflow.com/questions/16348925/...
- mögliche Duplikate von MySql-upsert und auto-Inkrement verursacht Lücken
- Ich schrieb eine innodb-Lücke Antwort Hier
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist beabsichtigt und wird immer passieren.
Warum?
Let ' s take 2 sich überlappende Transaktion, die tun, Fügt
Dann
Wenn aufeinanderfolgende Werte waren garantiert, die jede Transaktion müsste passieren, eine nach der anderen. Nicht sehr skalierbar.
Siehe auch Tun Eingefügten Datensätze Erhalten Immer Eine Zusammenhängende Identität, Werte (SQL-Server, aber im Prinzip dasselbe)
Können Sie einen trigger erstellen, behandeln die auto-Inkrement als:
Dies ist ein problem in der InnoDB storage engine von MySQL.
Es ist nicht wirklich ein problem, wenn Sie überprüfen die Dokumentation im "AUTO_INCREMENT Umgang mit InnoDB" es ist im Grunde sagt, dass InnoDB verwendet eine spezielle Tabelle zu tun, das auto Schritten beim Start
Und in der Abfrage verwendet wird, ist so etwas wie
Dies erhöht die Parallelität, ohne wirklich einen Einfluss auf Ihre Daten.
Nicht diese verwenden, MyISAM statt InnoDB als storage engine
Vielleicht (habe ich nicht getestet) eine Lösung ist, um
innodb_autoinc_lock_mode
zu0
.Nach http://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html das könnte die Dinge ein wenig langsamer (wenn Sie ausführen, fügt mehrere Zeilen in einer einzelnen Abfrage), sollte aber zu entfernen Lücken.