У меня вопрос о том, как MySQL с движком MyISAM обрабатывает свободное / пустое пространство после удаления и как он себя ведет при вставке новых записей.
Например, подумайте о новой и пустой БД (допустим, это 10 КБ, например).
После вставки 10000 записей (допустим, каждая запись занимает 1 КБ) ее общий размер в файловой системе становится 10010 КБ.
Затем, после удаления 5000 записей, его размер в файловой системе все еще остается 10010 КБ, даже если количество записей уменьшилось вдвое (здесь нет ничего странного, это нормальное поведение).
Команда OPTIMIZE может затем «дефрагментировать» базу данных и освободить свободное пространство путем реорганизации данных.
НО, если я полностью проигнорирую команду OPTIMIZE и вставлю 2000 новых записей (так что 5000 все еще там + 2000 новых записей = 7000 записей в общей сложности), MySQL повторно использует свободное пространство, оставшееся после предыдущих удалений для новых записей (это означает, что БД размер 10010 КБ не изменится) или он «добавляет» новые записи в БД (что означает, что размер БД в файловой системе вырастет, скажем, до 12010 КБ)?
Спасибо! :)
Обычно, если таблица MyISAM имеет свободное место в середине файла данных после операций DELETE, она вставляет строки в это свободное пространство. Однако из-за того, как MyISAM реализует параллелизм, то, что происходит, зависит от рабочей нагрузки.
Для таблицы с отверстием новые строки вставляются в конец таблицы, если она используется другим потоком. В противном случае MySQL получает обычную блокировку записи и вставляет строку в отверстие.
И даже после тонкой настройки этого параметра concurrent_insert.