У меня есть несколько УДАЛИТЬ запросов для запуска против некоторых довольно огромного стола (~ 100 ГБ), и я хочу, чтобы оптимизировать их как можно больше:MySQL удалить оптимизацию оператора
delete from table1 where column1 < date_sub(now(), interval 100 hour);
column1 является datetime
колонком, я предположим, что создание индекса для этого столбца ускорит удаление. кроме того, все, что я могу сделать здесь? будет ли функция date_sub()
замедлить запрос? должен ли я рассчитать это значение перед запуском запроса?
delete from table2 where column2 = x;
column2 является основным ключом для table2, поэтому он уже является индексом в соответствии с документацией mysql. мой вопрос: тип индекса PRIMARY
, это то же самое, что и INDEX
? мне нужно сделать еще один индекс вида INDEX
для ускорения?
delete from table3 where column3 = y;
таблица3 имеет составной первичный ключ, который является столбцом3 и column4. поэтому у меня есть индекс первичного ключа, но поскольку запрос удаления не использует столбец4, должен ли я сделать отдельный индекс только для столбца3? или объединенный первичный ключ сделал бы это?
Я думаю, что это довольно простые вопросы, но я не мог найти определенного ответа, характерного для моей ситуации, поэтому любая помощь была бы оценена!
Ваш первый шаг будет заключаться в использовании 'EXPLAIN' в этом заявлении delete и выяснить, что он делает. Вставьте его, если вам нужно. – Schwern
'EXPLAIN' работает только для операторов' SELECT' (пока). –
Я предполагаю, что column1 является 'DATETIME', а не' DATE'? Иначе с помощью часового интервала на нем было бы глупо. – Schwern