我目前准备了以下查询:
select sum(amount) as total
from incomes
where (YEAR(date) = '2019' and MONTH(date) = '07')
and incomes.deleted_at is null
稍微回顾一下,请注意表中包含大量数据所花费的时间太长,因为它经历了所有这些。我不太了解优化查询,但我想开始记录和研究这种情况,阅读一点注意事项虽然可以为日期类型字段创建 index
,一旦
将不会使用索引,在这种情况下 WHERE
子句的一列被函数包裹,MySQLYEAR
和 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/