Я нахожу, что это лучший способ оценить размер таблицы для этого я изучил много блогов и форумов, но не смог найти точного ответа
Например, у нас есть таблица City с движком InnoDB , скажем, в будущем (в течение следующего года) она будет иметь 1 миллион записей, так что это будет примерный размер данных и размер индекса этой таблицы в этот период.
mysql> desc City;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| CountryCode | char(3) | NO | MUL | | |
| District | char(20) | NO | | | |
| Population | int(11) | NO | | 0 | |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.03 sec)
ОБНОВИТЬ
Какова будет оценочная верхняя граница (максимальный размер таблицы) с 1 миллионом записей и как мы можем ее оценить.
Ответы:
Учитывая описание таблицы, я вижу
Для миллиона строк это будет 77 000 000 байтов (73,43 МБ)
Что касается измерения таблицы, для данной таблицы mydb.mytable вы можете выполнить этот запрос
Чтобы измерить все таблицы, сгруппированные по базам данных и хранилищу
Запустите эти запросы, и вы сможете отслеживать изменения в использовании диска базы данных / движка.
Попробуйте!
источник
CHAR
длины должны быть умножены на 3 , если у вас естьCHARSET utf8
. Все накладные расходы можно оценить, удвоив или утроив вычисление.ALTER TABLE ... ENGINE=InnoDB;
), чтобы получить точное соотношение. Усилие может не стоить того.Если вы используете таблицы InnoDB, вы можете получить размер для данных / отдельных индексов
mysql.innodb_index_stats
. Статистика «size» содержит ответ в страницах, поэтому его необходимо умножить на размер страницы, то есть по умолчанию 16K .Индекс PRIMARY - это сами данные.
источник
выполнив этот запрос, вы можете получить размер, используемый для
Data
иIndex
таблицы, вы можете проверить этот размер по количеству строк и прогнозировать 1 миллион строкисточник
Если у вас еще нет данных, вот несколько советов. Следующее относится к InnoDB. (MyISAM намного проще и меньше.)
Не используйте
CHAR
для столбцов переменной длины. ЧтоCHARACTER SET
вы используете? Ascii нужен один байт на символ; utf8mb4 нужно от 1 до 4.Всего = около 80 байтов.
Умножьте 80 на 2 или 3, чтобы учесть различные накладные расходы. Скорее всего, таблица строк 1М будет между 160 и 240 МБ.
Чтобы измерить один индекс, скажем,
CountryCode
из 3 байтов:Заметки:
Только листовые узлы (из BTrees) должны быть вычислены; накладные расходы для неконечных узлов обычно составляют 1%.
Данные
PRIMARY KEY
«кластеризованы» с данными, поэтому нет необходимости вычислять их.Если у вас нет явного PK, то вам нужно добавить 6 байтов к размеру строки, чтобы учесть изготовленное PK.
ROW_FORMAT = COMPRESSED
дает усадку 2: 1. (Это не так хорошо, как типичная степень сжатия zip (и т. Д.) 3: 1.)SHOW TABLE STATUS LIKE "tablename";
это быстрый способ вычислить «фактический» размер. СмотритеData_length
для данных и ПК;Index_length
для вторичных индексов иData_free
для некоторых других вещей.Это редко для того,
Index_length
чтобы превзойтиData_length
. Однако это не «неправильно», чтобы это произошло.источник
Это утомительно. Но подробности в документах .
Чтобы быть настолько точным, насколько это возможно, что редко требуется, вам нужно прочитать также о структуре таблицы и структуре индекса.
Если бы я был на вашем месте, я бы построил таблицу, наполнил бы ее миллионами строк тестовых данных и измерил бы изменение в размере. В зависимости от вашего приложения может потребоваться учитывать размер файлов журнала транзакций.
источник