Для производительности, чтобы разрешить MySQL использовать сканирование диапазона (используя индекс с createdDate
в качестве ведущего столбца), я бы сослался на bare столбца в предложении WHERE
.
Я бы сделал все необходимые манипуляции на буквальной стороне сравнения, чтобы получить строку, с которой мы можем сравнить пустой столбец.
Сначала я написал бы инструкцию SELECT, чтобы убедиться, чтоон работает (прежде чем мы запустим DELETE и обнаружим, что он удаляет больше, чем мы ожидали)
Мы можем проверить выражения в простом операторе SELECT, например,
SELECT DATE_FORMAT( NOW() + INTERVAL -10 DAY , '%Y-%m-%dT00:00:00') AS dt
Затем мы можем использовать этовыражение в предложении WHERE
SELECT t.*
FROM myTable t
WHERE t.createddate < DATE_FORMAT( NOW() + INTERVAL -10 DAY , '%Y-%m-%dT00:00:00')
ORDER BY t.createddate DESC
Это выражение использует полночь '00:00:00'
в качестве компонента времени;Есть другие выражения, которые достигли бы эквивалентного результата.
WHERE t.createddate < DATE_FORMAT( DATE(NOW()) + INTERVAL -10 DAY , '%Y-%m-%dT%T')
Нам действительно нужно сузить круг и конкретизировать, что означает «старше 10 дней, чем текущая дата».
Как только мы убедились, что запрос возвращает строки, которые мычтобы удалить, я бы преобразовал это в оператор DELETE, заменив ключевое слово SELECT и пропустив ORDER BY
SELECT t.*
FROM myTable t
WHERE t.createddate < DATE_FORMAT( NOW() + INTERVAL -10 DAY , '%Y-%m-%dT00:00:00')