#php #mysql
#php #mysql
Вопрос:
У меня есть база данных с примерно 280 миллионами строк, и я создал резервные копии всего этого (шаг 1), и теперь я пытаюсь очистить все записи, поскольку они просто не нужны после создания резервной копии.
Я взломал несколько скриптов, таких как:
$begin=0;
for ($k = 1 ; $k < 280; $k ){
mysqli_query( $conn, "delete from this_table where id between
".$begin."000000 and ".$k."000000");
$begin ;
}
Я также попытался сократить это до кусков даже по 50 КБ, и это полностью зависает, чего мне здесь не хватает?
Было бы легко просто удалить эту таблицу и воссоздать ее заново, я чувствую, что это будет быстрее, но может привести к большому повреждению всей базы данных.
Комментарии:
1. Вы пытаетесь удалить всю таблицу в БД или только подмножество? Если это все, то усечение таблицы, вероятно, является наиболее эффективным способом. Просто убедитесь, что вы прочитали документы и убедитесь, что ни одно из предостережений не вызовет у вас проблем dev.mysql.com/doc/refman/8.0/en/truncate-table.html
2. Попытка удалить каждую строку, которая в данный момент находится в этой таблице
3. Усечение таблицы сработало отлично и было именно тем, что я искал, спасибо.
Ответ №1:
Для меня это сработало идеально.
MariaDB [myData]> truncate table browserQueries;
Query OK, 0 rows affected (6.161 sec)
Ответ №2:
Удаление большого количества строк происходит медленно в любой базе данных, а в MySQL и MariaDB, даже с InnoDB, удаления, как правило, сериализуются очень плохо.
Если у вас нет внешних ключей, это должно быть безопасно TRUNCATE this_table;
, что является мгновенной операцией O (1) и даст вам чистую, пустую таблицу, с оговоркой, что она сбросит значение AUTO_INCREMENT. Вам нужно будет исправить это с помощью ALTER TABLE this_table AUTO_INCREMENT=original_value;
Забегая вперед, самый оптимальный способ приблизиться к этому — почти наверняка использовать разделы. Раздел this_table
по диапазону идентификатора с соответствующим большим диапазоном. Как только диапазон будет полностью скопирован и больше не нужен, вы можете ALTER TABLE ... DROP PARTITION ...
, что также является операцией O (1) (мгновенной).