Как указано в других ответах, MySQL не может использовать индексы, кроме индекса PRIMARY KEY.
Таким образом, ваш лучший вариант, если у вас есть ПЕРВИЧНЫЙ КЛЮЧ на столе, это выполнить быстрый SELECT, а затем УДАЛИТЬ в соответствии со строками. Желательно в транзакции, чтобы вы не удаляли неправильные строки.
Таким образом:
DELETE FROM table WHERE column_with_index = 0
Будет переписано:
SELECT primary_key FROM table WHERE column_with_index = 0
=> возвращает много строк
DELETE FROM table WHERE primary_key IN(?, ?, ?)
=> ?
будет заменен результатами ВЫБРАННЫХ первичных ключей.
Если у вас не так много строк для удаления, это будет более эффективным способом.
Например, я только что натолкнулся на пример на той же таблице с теми же данными:
- 7499067 строк проанализировано с помощью DELETE: 12 секунд
против
- 6 строк, проанализированных с помощью SELECT с использованием хорошего индекса: 0,10 секунд
- 0 строк, которые будут удалены в конце