Ermitteln Sie die MySQL-Indexgröße für einen konkreten Index

7

Wie finde ich in MySQL für die InnoDB-Engine die Größe eines der Indizes heraus, die ich in derselben Tabelle habe ?

Ich weiß, dass ich die index_length aus information_schema.tables auswählen kann, aber dies gibt die Gesamtgröße aller Indizes in der Tabelle an.

Angenommen, ich habe eine Tabelle mit PK-Index, mehreren FK-Indizes und eindeutigen Einschränkungen usw. Kann ich nur die Größe eines dieser Indizes ermitteln? Angenommen, ich möchte nur die Größe des PK-Index kennen.

Timur
quelle
Innodb oder Myiasmus?
BCoates
InnoDB. Ich habe auch die ursprüngliche Frage damit aktualisiert, danke.
Timur

Antworten:

6

Es scheint keine Möglichkeit zu geben, die Antwort direkt aus MySQL herauszuholen. Sie können es jedoch ziemlich gut einschätzen:

Für innodb ist der PRIMARY-Index Teil der Daten selbst und wird in data_length angezeigt. Wenn eine Tabelle keine anderen Indizes hat, ist index_length 0.

Für jede Zeile in Ihrer Tabelle wird jeder Nicht-PRIMARY-Index (UNIQUE oder INDEX) gespeichert

  • 6 Bytes Overhead
  • jede Spalte indiziert
  • Jede Spalte in PRIMARY ist noch nicht im Index enthalten
  • 1 Bit pro mögliche NULL-Spalte, auf das Byte aufgerundet

Die Größe einer Spalte in einem Index ist der Speicherplatz, den die tatsächlichen Daten einnehmen, plus 1 oder 2 Byte Länge pro VARCHAR / TEXT / BLOB. NULL-Werte benötigen keinen Platz.

Für die B-Tree-Seiten und die nicht vollständigen Blattseiten entsteht ein zusätzlicher Aufwand von etwa 1,4x bis 2,8x. In meinen Datenbanken sieht es normalerweise ungefähr 2x aus.

FKs sollten über den von ihnen benötigten Index hinaus keinen zusätzlichen Speicherplatz haben.

MySQL-Dokumente - Quelle

BCoates
quelle