В настоящее время у меня подготовлен следующий запрос:
select sum(amount) as total
from incomes
where (YEAR(date) = '2019' and MONTH(date) = '07')
and incomes.deleted_at is null
при его небольшом просмотре обратите внимание, что слишком много времени занимает много данных в таблице, поскольку она проходит через все это.Я не очень разбираюсь в оптимизации запросов, но хочу начать документировать и исследовать этот случай, прочитав небольшую заметку о том, что, хотя можно создать index
для поля типа даты, MySQL
не будет использовать индексесли столбец предложения WHERE
обернут функцией в этом случае YEAR
и MONTH
.Так это правильно?Какие шаги я должен следовать, чтобы улучшить его производительность?Должен ли я попытаться реструктурировать свой запрос?