2013-12-07 3 views
1

У меня есть таблица (InnoDB) с десятками миллионов строк и несколькими индексами. Мне нужно удалить несколько миллионов строк с помощью первичного ключа. Эта операция довольно медленная, чем хотелось бы; что я могу сделать, чтобы ускорить его?Оптимизация удалений из очень большой таблицы MySQL

В этой таблице выполняются процессы, которые выполняют INSERT и SELECT. Если я могу это сделать, не мешая этим процессам, это было бы здорово, но это не совсем необходимо. Также (я не уверен, что это имеет значение) в этой БД нет внешних ключей.

+1

Показать код "delete". –

+0

Поскольку вы будете использовать основной ключ для удаления записей (т. Е. Вы ссылаетесь только на столбец первичного ключа в разделе where where), это будет охватываемый запрос кластеризованным индексом, он будет как можно быстрее, удалив миллионы строк займет свое время. –

+0

Это похоже на довольно похожий вопрос: http://stackoverflow.com/questions/14284238/how-can-i-improve-delete-from-performance-on-large-innodb-tables –

ответ

0

Вы можете использовать pt-archiver (Check percona toolkit), чтобы удалить записи из таблицы без блокировки.

pt-archiver --source h=host,D=db,t=child --purge --where 'id < 10000' 

Это будет быстрее, чем на равнине DELETE FROM db.child WHERE ID < 10000, но, по крайней мере, это не будет блокировать другие соединения.

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