FeR*_*cHo 0 mysql sql indexing optimization
我目前准备了以下查询:
select sum(amount) as total
from incomes
where (YEAR(date) = '2019' and MONTH(date) = '07')
and incomes.deleted_at is null
Run Code Online (Sandbox Code Playgroud)
稍微回顾一下时,请注意表格中的大量数据花费的时间太长,因为它经历了所有这些。我对优化查询不太了解,但我想开始记录和研究这种情况,阅读一点注意,虽然可以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;
Run Code Online (Sandbox Code Playgroud)
此查询可以利用 上的索引incomes(deleted_at, date, amount):
create index idx_incomes_deleted_at_date_amount on incomes(deleted_at, date, amount)
Run Code Online (Sandbox Code Playgroud)