MySQL + MyISAM выносит на обсуждение вопрос размера

У меня есть тестовая таблица. Тестовая таблица следующие:

CREATE TABLE  `mytest` (
  `num1` int(10) unsigned NOT NULL,
  KEY `key1` (`num1`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Я вставил 50 миллионов строк в эту таблицу.

Когда я действительно показываю состояние таблицы, avg_row_length равняется 7. Я ожидал видеть 4, так как MySQL использует 4 байта для целых чисел. Ключ имеет эффект на avg_row_length? Когда я смотрю на свой.MYD файл, размер составляет 334 МБ, который является точно, чем это должно быть, учитывая, что avg_row_length равняется 7, однако я действительно ожидал видеть 190 МБ, учитывая, что у меня только есть интервал.

+----------------+--------+---------+------------+----------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| Name           | Engine | Version | Row_format | Rows     | Avg_row_length | Data_length | Max_data_length  | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation         | Checksum | Create_options | Comment |
+----------------+--------+---------+------------+----------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| mytest         | MyISAM |      10 | Fixed      | 50000000 |              7 |   350000000 | 1970324836974591 |    600518656 |         0 |           NULL | 2010-05-22 09:15:06 | 2010-05-22 19:32:53 | NULL       | latin1_swedish_ci |     NULL |                |         |

Я включал вывод выставочного состояния таблицы для mytest таблицы. Извините за форматирование :D Заранее спасибо!

Alessandro Ferrucci

1
задан Quassnoi 25 May 2010 в 15:42
поделиться

1 ответ

Я думаю, проблема в размере указателя, который MySQL использует по умолчанию.

Цитата из справочника MySQL :

AVG_ROW_LENGTH

Примерная средняя длина строки для вашей таблицы. Вам нужно установить это только для больших таблиц со строками переменного размера.

Когда вы создаете таблицу MyISAM, MySQL использует произведение параметров MAX_ROWS и AVG_ROW_LENGTH, чтобы решить, насколько велика результирующая таблица. Если вы не укажете ни один из этих параметров, максимальный размер файлов данных и индекса MyISAM по умолчанию составляет 256 ТБ. (Если ваша операционная система не поддерживает файлы такого размера, размеры таблиц ограничены пределом размера файла.) Если вы хотите уменьшить размеры указателя, чтобы сделать индекс меньше и быстрее, и вам действительно не нужны большие файлы, вы может уменьшить размер указателя по умолчанию, установив системную переменную myisam_data_pointer_size. (См. Раздел 5.1.4, «Системные переменные сервера».) Если вы хотите, чтобы все ваши таблицы могли расти выше предела по умолчанию и хотите, чтобы ваши таблицы были немного медленнее и больше, чем необходимо, вы можете увеличить размер указателя по умолчанию. установив эту переменную. Если задать значение 7, размер таблицы может достигать 65 536 ТБ.

Попробуйте установить MAX_ROWS и AVG_ROW_LENGTH самостоятельно при создании таблицы или с помощью оператора ALTER TABLE и посмотрите, поможет ли это.

2
ответ дан 3 September 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: