6 Stimmen

Overhead bei der InnoDB-Festplattennutzung

Ich habe eine Tabelle, die zwei 32-Bit-Ganzzahlen enthält. Diese beiden Ganzzahlen werden verwendet, um den Cluster-Index zu erstellen. Der SQL-Code zum Erstellen der Tabelle lautet wie folgt,

CREATE TABLE `a` (
  `var1` int(10) unsigned NOT NULL,
  `var2` int(10) unsigned NOT NULL,
  PRIMARY KEY (`var2`,`var1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  • Es gibt 6921338 Zeilen in dieser Tabelle (abgerufen mit SELECT COUNT(*) FROM a )
  • Die Tabelle benötigt 358580224 Bytes Speicherplatz (abgerufen mit SHOW TABLE STATUS )

Nach meinen Berechnungen benötigt jede Zeile 51,8 Byte. Ich bin mir bewusst, dass InnoDB Overheads hat, während Zeilen speichern . Anhand der MySQL-Website habe ich jedoch errechnet, dass die Zeilengröße 26 Byte betragen sollte (5 Byte Header, 8 Byte für Ganzzahlen, 6 Byte Transaktions-ID und 7 Byte Rollzeigerfelder).

Ich versuche, die Zeilengröße zu reduzieren, da die Tabelle bis zu 160 Milliarden Datensätze enthalten kann.

Was übersehe ich bei meinen Berechnungen? Wie kann ich meine Tabelle optimieren, um weniger Platz zu benötigen? Oder sollte ich zu einer anderen Datenbank-Engine wechseln?

Update

Die Abfragen, die ich für diese Tabelle mache;

INSERT INTO a(var1,var2) VALUES(INTEGER,INTEGER),(INTEGER,INTEGER),...,(INTEGER,INTEGER);
SELECT var1 FROM a WHERE var2=INTEGER;
DELETE FROM a WHERE var2=INTEGER;

5voto

bash- Punkte 5844

Der Grund dafür ist, dass der von Ihnen erstellte Index ebenfalls Speicherplatz beansprucht. Bei einem geclusterten Index in InnoDB werden die Zeilendaten tatsächlich in den Indexblattknoten gespeichert. Wenn der Index verwendet wird, zeigt der Index also nicht auf die Zeile, sondern auf den Indexblattknoten, der die Zeilendaten zusammen mit dem PKEY enthält.

Dadurch wurde der Speicher viel größer.

Schauen Sie hier

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X