MySQL, удалите и индексируйте подсказку

Я должен удалить о 10K строках из таблицы, которая имеет больше чем 100 миллионов строк на основе некоторых критериев. Когда я выполняю запрос, требуется приблизительно 5 минут. Я выполнил объяснить план ( delete запрос, преобразованный в select * так как MySQL не поддерживает explain delete) и найденный, что MySQL использует неправильный индекс.

Мой вопрос: там какой-либо путь состоит в том, чтобы сказать MySQL, которые индексируют для использования во время, удаляют? В противном случае, что приблизительно я делаю? Выберите для временной работы, таблица затем удаляет из временной таблицы?

11
задан Brian Tompsett - 汤莱恩 6 July 2015 в 20:12
поделиться

2 ответа

Имеется синтаксис подсказки индекса . // ETA: к сожалению, не для удалений

ETA: Вы пробовали запустить ANALYZE TABLE $ mytable ?

Если это не окупится, я думаю, у вас есть 2 варианта: отбросить проблемный индекс перед удалением и воссоздать его после. Или СОЕДИНИТЕ свою таблицу удаления с другой таблицей по желаемому индексу, которая должна гарантировать использование желаемого индекса.

4
ответ дан 3 December 2019 в 11:20
поделиться

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

Возможно, вы захотите почитать эту книгу: http://oreilly.com/catalog/9780596003067

В ней есть отличный раздел о том, как работают индексы, и о других параметрах настройки.

2
ответ дан 3 December 2019 в 11:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: