Когато използвате mysql, може да откриете, че макар таблицата да изтрива много данни, файловете с данни и индексните файлове в таблицата са странно малки. Това е така, защото mySQL ще остави много пропуски в данни при изтриване на данни (особено Text и BLOB), които заемат мястото на оригиналните данни, така че размерът на файла не се променя. Тези дупки могат да бъдат използвани повторно в бъдеще при въвеждане на данни, и разбира се, те може да останат там. Тази дупка не само увеличава разходите за съхранение, но и намалява ефективността на сканиране на таблицата поради фрагментация на данните.
Сценарии на употреба:Ако сте изтрили голяма част от таблицата или сте направили много промени в таблица с редове с променлива дължина (една с VARCHAR, BLOB или TEXT колони), трябва да използвате OPTIMIZE TABLE. Изтритите записи се съхраняват в свързания списък, а последващите операции INSERT използват отново старото местоположение на записа. Можете да използвате OPTIMIZE TABLE, за да пренасочите неизползваното пространство и да организирате фрагменти от файлове с данни. [Когато голямо количество данни бъде изтрито от вашата библиотека, може да забележите, че размерът на файла с данни не е намалял. Това се дължи на фрагментацията, останала във файла с данни след операцията по изтриване.
В повечето ситуации изобщо не е нужно да пускаш OPTIMIZE TABLE. Дори и да правите много обновявания на редове с променлива дължина, не е нужно да ги пускате често, веднъж седмично или веднъж месечно, само за конкретни таблици.
OPTIMIZE TABLE работи само за MyISAM, BDB и InnoDB таблици.
За BDB таблиците OPTIMIZE TABLE в момента е съпоставена с ANALYZE TABLE. За таблиците на InnoDB таблицата OPTIMIZE се съпоставя с ALTER TABLE, която възстановява таблицата. Операциите по преизграждане, актуализиране на индексната статистика и освобождаване на неизползвано пространство в клъстерирани индекси.
Забележка: MySQL заключва таблицата по време на изпълнение на OPTIMIZE TABLE.
За myisam можете директно да използвате таблицата за оптимизация table.name,Когато става дума за InnoDB енджин, той ще отчете "Таблицата не поддържа оптимизация, вместо това се прави recreate + analyze", и при нормални обстоятелства, ако конвертирате от myisam към innodb, ще използвате alter table table.name engine='innodb' за конвертиране, и можете да използвате това и за оптимизация.Следователно, когато става дума за InnoDB енджин, можем да използваме alter table table.name engine='innodb' вместо optimize for optimization。
За да видите ефектите преди и след това, можете да използвате командата "show table status", например show table status от [database] като '[table_name]'; data_free в резултата от връщането е пространството за съхранение, заето от празнотата.
Shell скриптът, който реализира MySQL таймериран ремонт на batch check table и optimize table optimize table, е следният:
Оригинален:
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
|