我目前准备以下查询:

select sum(amount) as total
  from incomes
 where (YEAR(date) = '2019' and MONTH(date) = '07')
   and incomes.deleted_at is null


稍作回顾时,请注意表中包含大量数据会花费很长时间,因为它会经历所有这些过程。我对优化查询了解不多,但是我想开始记录和研究这种情况,请阅读一点说明,尽管可以为日期类型字段创建index,但MySQL不会使用索引一旦WHERE子句的列用函数包装(在这种情况下为YEARMONTH)。这是正确的吗?我应该遵循哪些步骤来改善其性能?我应该尝试重组查询吗?

最佳答案

我建议将查询编写为:

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)

关于mysql - 使用mysql中的日期类型字段优化查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56959725/

10-11 03:08
查看更多