В MySQL что означает «накладные расходы», что в этом плохого, и как это исправить? - PullRequest
147 голосов
/ 19 февраля 2009

простой вопрос, но сейчас он меня мучает ...

что такое "накладные расходы" в MySQL, и я должен волноваться?

исправляет ли это нажатие кнопки «оптимизировать таблицу» на самом деле?

Ответы [ 4 ]

138 голосов
/ 19 февраля 2009

Похоже, что накладные расходы - это временное дисковое пространство, которое база данных использовала для выполнения некоторых запросов, поэтому вам следует беспокоиться только о том, насколько оно велико.

Вы можете сравнить «Оптимизация таблицы» с дефрагментацией вашего жесткого диска.

Цитирую:

Каждая база данных со временем требуют некоторой формы обслуживания для держите его на оптимальной производительности уровень. Очистка удаленных строк, повторное упорядочение, сжатие, управление индексные пути, дефрагментация и т. д. что известно как ОПТИМИЗАЦИЯ в MySQL и другие термины в других базах данных. Например, IBM DB2 / 400 называет это РЕОРГАНИЗИРУЙТЕ ЧЛЕНА ФИЗИЧЕСКОГО ФАЙЛА.

Это как замена масла в твоя машина или настройка. Ты можешь думаю, что вы действительно не должны, но при этом ваша машина работает намного лучше, Вы получаете лучший пробег газа и т. д. Автомобиль который получает много пробега требует настройки чаще. База данных, которая получает интенсивное использование требует того же. Если вы делаете много обновлений и / или УДАЛИТЬ операции, и особенно если ваши таблицы имеют переменную длину столбцы (VARCHAR, TEXT и т. д.), вам нужно чтобы быть в курсе.

79 голосов
/ 19 февраля 2009

Если вы говорите о том, что phpMyAdmin вызывает overhead, то это фактический размер файла данных таблицы относительно идеального размера того же файла данных (как если бы он был только что восстановлен из резервной копии).

По соображениям производительности MySQL не сжимает файлы данных после удаления или обновления строк.

Это overhead плохо для сканирования таблицы, т.е. е. когда ваш запрос должен выполняться по всем табличным значениям, ему нужно будет посмотреть на больше пустого пространства.

Вы можете избавиться от overhead, запустив OPTIMIZE TABLE, который сожмет вашу таблицу и индексы.

7 голосов
/ 23 декабря 2013

Служебные данные составляют Data_free таблицы, то есть Количество выделенных, но неиспользованных байтов. Мы можем найти его командой SQL ПОКАЗАТЬ СТАТУС . Это свободное место в выделенном размере для вашей таблицы.

1 голос
/ 24 февраля 2015

Оптимизация таблицы может быть очень проблематичной. Например, если таблица интенсивно используется на сайте.

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

После удаления большой части таблицы MyISAM или ARCHIVE или внесения множества изменений в таблицу MyISAM или ARCHIVE со строками переменной длины (таблицы со столбцами VARCHAR, VARBINARY, BLOB или TEXT). Удаленные строки сохраняются в связанном списке, и последующие операции INSERT повторно используют старые позиции строк. <</p>

Кажется, я подтвердил это поведение. И это, безусловно, было бы очень полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...