Я должен удалить о 10K строках из таблицы, которая имеет больше чем 100 миллионов строк на основе некоторых критериев. Когда я выполняю запрос, требуется приблизительно 5 минут. Я выполнил объяснить план ( delete
запрос, преобразованный в select *
так как MySQL не поддерживает explain delete
) и найденный, что MySQL использует неправильный индекс.
Мой вопрос: там какой-либо путь состоит в том, чтобы сказать MySQL, которые индексируют для использования во время, удаляют? В противном случае, что приблизительно я делаю? Выберите для временной работы, таблица затем удаляет из временной таблицы?
Имеется синтаксис подсказки индекса . // ETA: к сожалению, не для удалений
ETA:
Вы пробовали запустить ANALYZE TABLE $ mytable
?
Если это не окупится, я думаю, у вас есть 2 варианта: отбросить проблемный индекс перед удалением и воссоздать его после. Или СОЕДИНИТЕ свою таблицу удаления с другой таблицей по желаемому индексу, которая должна гарантировать использование желаемого индекса.
Я никогда не сталкивался с ситуацией, когда MySQL выбирал неправильный индекс, скорее, мое понимание того, как работают индексы, обычно было ошибочным.
Возможно, вы захотите почитать эту книгу: http://oreilly.com/catalog/9780596003067
В ней есть отличный раздел о том, как работают индексы, и о других параметрах настройки.