Что входит в таблицу InnoDB? Вот приблизительный список:
- Поскольку у вас нет
PRIMARY KEY
, добавляется скрытый 6-байтовый номер.
- Каждому столбцу предшествует длина и нулевая информация. Это может добавить 2 байта на строку в вашем случае.
- Для каждой строки предусмотрены все виды служебных данных, включая данные о транзакциях и т. Д. Одна оценка составляет 29 байт на строку.
- BTree заполнен не более чем на 15/16. (15 КБ / 16 КБ).
Между тем удобное правило для типичных определений таблиц заключается в умножении очевидного общего размера столбца на 2–3, чтобы получить размер файла .ibd. Это не работает для вашего случая, потому что у вас есть нереально небольшое количество (1) столбцов.
Рассматривая только основные, постоянные, накладные расходы:
9420 * 16/15 * (29+6) = 351KB
Это число хорошо вписывается в нижнюю границу размеров таблицы, которую вы получили.
Еще одна проблема: в какой-то момент InnoDB захватывает куски пространства («экстенты») размером 4/8/16 МБ (я не уверен, какой это размер). Я полагаю, вы еще не достигли этого. Когда это происходит, вычисления становятся еще более запутанными и трудными для понимания.
Достаточно сказать, что InnoDB сделал несколько компромиссов. Они «тратят» некоторое пространство (иногда много), чтобы сделать обработку проще и быстрее.
Если у вас было PRIMARY KEY
, то 15/16 ставится под сомнение. Если вы вставите в порядке PK, то 15/16 палочки. Но если вы вставите случайно, он падает до 69%. Это из-за разбиения блока.
Да, и "большие" столбцы текста / больших двоичных объектов перестают записываться. И ROW_FORMAT
добавляет морщины.
И, если бы вы сделали это с MyISAM, вам бы дали загадочные размеры, такие как 75360, 75360, 75360 и 94200. Это гораздо проще объяснить, и, если я правильно понял, очень предсказуемо.
Достаточно смущен?