оптимизировать запрос с полем типа даты в MySQL - PullRequest
0 голосов
/ 09 июля 2019

В настоящее время у меня подготовлен следующий запрос:

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.Так это правильно?Какие шаги я должен следовать, чтобы улучшить его производительность?Должен ли я попытаться реструктурировать свой запрос?

1 Ответ

4 голосов
/ 09 июля 2019

Я бы предложил написать запрос как:

select sum(i.amount) as total
from incomes i
where i.date >= '2019-07-01' and
      i.date < '2019-08-01' and
      i.deleted_at is null;

Этот запрос может использовать индекс по incomes(deleted_at, date, amount):

create index idx_incomes_deleted_at_date_amount on incomes(deleted_at, date, amount)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...