2011-12-28 2 views
3

У меня есть таблица InnoDB в MySQL, которая содержала около 600 тыс. Строк. После удаления 400k + строк, я предполагаю, что мне нужно запустить OPTIMIZE.Выполнение оптимизации на копии таблицы?

Однако, поскольку таблица будет заблокирована во время этой операции, сайт не будет использоваться в то время. Итак, мой вопрос: должен ли я запускать оптимизацию в таблице базы данных в реальном времени (с чуть менее 200 тыс. Строк)? Или можно создать копию этой таблицы, запустить OPTIMIZE на этой копии и после этого переименовать обе таблицы, чтобы скопировать данные обратно в таблицу?

+0

200k строк не так много, вам нужно сделать довольно быстро, но то, что сказал @gbn, - это путь. –

ответ

6

Если вы создадите копию, то она должна быть оптимизирована уже, если вы сделаете CREATE TABLE..AS SELECT... Нет необходимости запускать его отдельно

Однако я бы предпочел скопировать строки 200 тыс., Чтобы сохранить их в новой таблице, а затем переименовать таблицы. Этот способ - это меньше шагов и меньше работы.

CREATE TABLE MyTableCopy AS 
SELECT * 
FROM myTable 
WHERE (insert Keep condition here); 

RENAME TABLE 
    myTable TO myTable_DeleteMelater, 
    MyTableCopy TO myTable; 
+0

Работал отлично! Благодаря! – libeco

Смежные вопросы