我目前准备以下查询:
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
)。这是正确的吗?我应该遵循哪些步骤来改善其性能?我应该尝试重组查询吗? 最佳答案
我建议将查询编写为:
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/