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

标签 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一旦 WHERE 子句的一列被函数包裹,MySQL 将不会使用索引,在这种情况下 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/

相关文章:

mysql - 事务和主从复制

mysql - 选择天数小于给定阈值的行

MySQL - 关于重复键 - CASE WHEN THEN ELSE 不起作用

python - Python 中使用随机梯度下降的岭回归

php - 检查 PHP 数组是否为空的最佳方法

Mysql 的Prepare语句获取变量中的列值

MySQL 缩短查询 - SELECT 有多个 OR 选择

javascript - 如何删除 select php foreach 结果中的重复项

python - 如何查询SQLAlchemy中的关联表?

matlab - 使用 Matlab 进行优化