У меня есть таблица, которая содержит два 32-битных целых числа.Эти два целых числа используются для создания кластеризованного индекса.SQL для создания таблицы выглядит следующим образом:
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;
- В этой таблице 6921338 строк (получено с помощью
SELECT COUNT(*) FROM a
) - Таблица использует 358580224 байта пространства(получено с помощью
SHOW TABLE STATUS
)
Согласно моим расчетам, каждая строка использует 51,8 байта.Я знаю, что InnoDB имеет накладные расходы при хранении строк .Однако, используя веб-сайт MySQL, я подсчитал, что размер строки должен составлять 26 байт (5-байтовый заголовок, 8 байт для целых чисел, 6-байтовый идентификатор транзакции и 7-байтовые поля указателя ролла).уменьшить размер строки, потому что таблица может заполняться до 160 миллиардов записей.
Чего мне не хватает в моих расчетах?Как я могу оптимизировать мой стол, чтобы использовать меньше места?Или я должен переключиться на другой механизм базы данных?
Обновление
Запросы, которые я делаю для этой таблицы;
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;