MySQL + MyISAM размер таблицы вопрос - PullRequest
1 голос
/ 25 мая 2010

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

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 МБ, учитывая, что у меня есть только int.

+----------------+--------+---------+------------+----------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| 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 Заранее спасибо!

Алессандро Ферруччи

1 Ответ

2 голосов
/ 25 мая 2010

Мне кажется, проблема в размере указателя, который 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 и посмотрите, помогло ли это.

...