Heim  >  Artikel  >  Datenbank  >  Warum fügt Mysql InnoDB einen automatisch inkrementierenden Primärschlüssel hinzu, der nichts mit dem Geschäft zu tun hat?

Warum fügt Mysql InnoDB einen automatisch inkrementierenden Primärschlüssel hinzu, der nichts mit dem Geschäft zu tun hat?

高洛峰
高洛峰Original
2016-12-02 13:26:131409Durchsuche

Im MySQL-Tabellendesign wird normalerweise eine Spalte mit automatischer Inkrementierung, die nichts mit dem Geschäft zu tun hat, als Primärschlüssel verwendet.
Das liegt daran, dass MySQL standardmäßig den B-Tree-Index verwendet, den Sie einfach als „sortierte Schnellsuchstruktur“ verstehen können.
Das Folgende ist das Strukturdiagramm eines B-Baums, eines zweischichtigen B+-Baums, der Fan-Out jeder Seite beträgt 4 und der obere Datensatz speichert den Mindestwert von jede Seite; jede Seite durchläuft zweiseitig verknüpfte Listen; Wie oben gezeigt, führt die Aufteilung zu einer Datensatzverschiebung. Der optimierte Aufteilungsvorgang erfordert jedoch keine Datensatzverschiebung:

Warum fügt Mysql InnoDB einen automatisch inkrementierenden Primärschlüssel hinzu, der nichts mit dem Geschäft zu tun hat?

In der Implementierung von InnoDB wird für jeden eine zuletzt eingefügte Position beibehalten Indexseite, sowie die letzte Einfügung Ist eine auf-/absteigende Kennung. Anhand dieser Informationen kann InnoDB feststellen, ob die neu eingefügten Datensätze in der Seite noch die Inkrementierungs-/Verringerungsbeschränkungen erfüllen. Wenn die Einschränkungen erfüllt sind, wird die optimierte Aufteilungsstrategie übernommen. Warum fügt Mysql InnoDB einen automatisch inkrementierenden Primärschlüssel hinzu, der nichts mit dem Geschäft zu tun hat? Daher wird empfohlen, eine Sequenz zu verwenden von sequentiell ansteigenden IDs als Primärschlüssel, es muss jedoch nicht das Autoinkrementierungsfeld der Datenbank sein, solange es die sequentielle Erhöhung erfüllt. Viele große Anwendungen verfügen über sequentiell steigende ID-Generatoren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn