Rsa97, Спасибо за ответ, вы очень помогли.
Ответ.
Разница в том, что по полю `date` индекс у вас есть, а по выражению `date`+23328000 индекса нет и быть не может.
Чаще всего MySQL не ошибается.
В вашем случае ожидается, что под условие `date` < CONVERT(UNIX_TIMESTAMP(), SIGNED) попадёт 50% строк, а значит проще перебрать все строки, чем читать в одном месте индекс, в другом строки, на которые он ссылается.
Индекс работает когда:
1. В левой части условия находится чистое поле, а не выражение или функция от поля.
2. Есть подходящий индекс. Если условий несколько, то может использоваться составной индекс, имеющий подходящий префикс.
3. MySQL считает, что использование индекса затратит меньше ресурсов, чем прямое сканирование.