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;