使用mysql中的日期类型字段优化查询

时间:2019-07-09 19:56:05

标签: mysql sql optimization indexing

我目前准备了以下查询:

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

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

1 个答案:

答案 0 :(得分:4)

我建议将查询编写为:

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)