2013-07-20 3 views
7

Я использую truncate table table_name; на столе с примерно 1 миллионом строк, но он занимает слишком много времени, работает с последних 3 часов.усеченный стол занимает очень долгое время, это нормально?

Нормально ли это? Можете ли вы предложить другой способ удалить все строки из таблицы, что может быть быстрее?

+2

Какой двигатель? MYISAM или InnoDB – hjpotter92

+0

Также проверьте: http://bugs.mysql.com/bug.php?id=68184 – hjpotter92

+0

Есть ли какой-либо другой процесс, который в настоящее время использует таблицу? – Ben

ответ

30

усечение не будут работать в некоторых случаях, таких как,

, когда у вас есть индексный рода вещи и некоторые ограничения внешнего ключа

Easy путь я предлагаю это

RENAME TABLE table_name TO t1; 

CREATE TABLE table_name LIKE t1; 

DROP TABLE t1; 

или вы можете также использовать DELETE FROM table_name;

+2

брутально ... Мне это нравится :) Если вам действительно не нужны данные; это, вероятно, лучший способ сделать это. – Trent

+0

согласился, это лучший способ. –

+1

@smrikatiyar: Примите ответ, если это сработает для вас. –

1

Я считаю, что во время выполнения запроса возникает тупик, поэтому лучше его убить.

Я использовал для удаления большого количества данных, удалив небольшой кусок в одном запросе (10k отлично работает).

Таким образом, вы могли бы прямо какой-то скрипт, который будет делать это для вас

+1

Если усечка медленная, я думаю о создании новой таблицы с такой же структурой, а затем опускать старую, я думаю, что это будет довольно быстро. PLS поделиться ур мнения по этому вопросу. –

0

У меня только что усеченный навсегда (более 6 минут), а затем я отменил его. Или так я думал. Фактически, этот шаг занял гораздо меньше секунды, и я отменил действие второго шага LATER - окно Action Output не обновилось.

0

Рекомендуется также перезапустить службу MySQL или всю систему, если ни одно из вышеперечисленных решений не работает.

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