[FIXED] MySQL INT-Typ von 5 Bytes?

Ausgabe

Gibt es eine Möglichkeit, eine INT-Spalte zu haben, die 5 Bytes verwendet? Der Grund dafür ist, dass INT (4 Byte), das 4 Milliarden Ganzzahlen zuweist, für meine Anwendung nicht ganz genug ist, aber BIGINT (8 Byte) ist ein Overkill, der die Leistung beeinträchtigen würde, da MySQL viel größere Festplattenspeicher nach irgendetwas durchsuchen müsste. Besonders wenn wir Milliarden von Zeilen haben, würde der zusätzliche Speicherplatz für die Primärschlüssel viele GB betragen.

Gibt es so etwas wie eine 5-Byte-INT-Spalte in MySQL? Gibt es etwas, mit dem ich MySQL leicht anpassen kann, um das zu bekommen?

Lösung

Die einfache Antwort ist nein – es gibt kein 5-Byte-Integer-Feld.

Wenn Sie sich jedoch eingehender mit der Quelle Ihrer Frage befassen, scheint der mit einem BIGINT verbundene Overhead falsch wahrgenommen zu werden.

Ja, Sie betrachten den doppelten Datenspeicher für diese Spalte, aber jede Zeile in MySQL hat:

  1. ein 13-Byte-Header für Ihren Clustered Index (PK)
  2. ein 6-Byte-Header pro indiziertem Datensatz
  3. ein 1-Byte-Zeiger pro nicht indiziertem Datensatz

(Siehe hier: https://dev.mysql.com/doc/refman/5.1/en/innodb-table-and-index.html#innodb-physical-record )

Daher erhöhen Sie Ihre Zeilengröße nur um etwa 14%, indem Sie Ihre BIGINT auf 5 Bytes ((8-5) / (8+13)) reduzieren, vorausgesetzt, es ist die einzige Spalte in Ihrer Tabelle.

Wenn Sie das COMPACT-Zeilenformat verwenden und Ihren PK eliminieren, könnten Sie 8 Byte pro Zeile einsparen (was Ihren Index auf 5 Byte reduziert).

Die Auswirkungen Ihres Index auf die Leistung sind mit BIGINT vs. INT vernachlässigbar (obwohl das Entfernen Ihres PK wahrscheinlich zu einem spürbaren Leistungsverlust aufgrund des Verlusts des Clusterings führen wird).

Die Auswirkungen auf den Speicher sind ebenfalls eher vernachlässigbar – Sie sehen eine Auswirkung von ~ 20 GB bei einer Ordnungszahl von etwa 8 Milliarden. Moderne Speicherlösungen sollten das auffressen.


Beantwortet von –
Steven Moseley


Antwort geprüft von –
Pedro (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like