Я пытаюсь сократить пространство, занимаемое моими таблицами БД, и оптимизировать производительность моей системы. Мне интересно специально оптимизировать таблицу MyISAM с большим объемом данных. Итак, я изменил тип колонки следующим образом:
- от INT (11) до BIT (1) или TINYINT (3) или SMALLINT (6) или MEDIUMINT (9)
- от VARCHAR (...) до CHAR (x), с x наименьшее количество символов полезноПространство увеличилось в таблице MyISAM после изменения типа столбца с INT на SMALLINT и TINYINT
Но результат был неожиданным.
Я побежал следующий запрос до и после моих изменений:
ВЫБРАТЬ table_name AS "Таблица", круглые (((data_length + index_length)/1024/1024), 2) "Размер в мегабайтах" ОТ information_schema.TABLES WHERE table_schema = "my_schema" AND table_name = "my_table";
Результаты:
- ДО 558 Мб
- ПОСЛЕ 673,96 Мб
пространство увеличивается. Зачем?
Редактировать:
Проблема была CHAR-преобразование. В моем случае VARCHAR занимает меньше места, потому что поля не имеют фиксированного размера, поэтому для фиксированных полей CHAR требуется больше места.
С VARCHAR мой стол занимает 444 Мб.
PS: Не используйте 'VARCHAR (n)', когда 'n' является минимальным; завтра вы получите длинную строку. Так что дайте себе что-то слабое. –
Я использую MyISAM, потому что мне приходится удалять и вставлять много строк каждый день. Таблицы MyISAM - это таблицы фактов хранилища данных и очень большие. С InnoDB операция удаления была слишком дорогой. Моя цель - сократить время удаления и вставить в мою таблицу. –
Если вы удаляете «старые» данные, разделение выполняется быстрее - практически мгновенно. См. [Мой блог] (http://mysql.rjweb.org/doc.php/partitionmaint). –