根据时间字段按月分组汇总记录总数,索引失效,如何优化?

我在mysql数据库中创建的表tms_cdr, 单表中目前100万数据,根据时间字段timestart(datetime)进行过滤本年度内的数据,并按照月度分组汇总每月的记录总数,在timestart字段上的索引失效,查询耗时10秒以上,请教是否有优化方案,以下是我查询的sql语句,谢谢!
MySQL
SELECT
MONTH( timestart ) AS m,
type,
count(*) AS total
FROM
tms_cdr
WHERE
( timestart BETWEEN CONCAT( YEAR ( NOW()), ‘-01-01 00:00:00’ ) AND CONCAT( YEAR ( NOW()), ‘-12-31 23:59:59’ ) AND duration > 0 )
AND tms_cdr.deleted_at IS NULL
GROUP BY
m,
type

讨论数量: 1

在索引列上使用内置函数会导致索引失效,可以看看这个:
博客:对线面试官:12个MySQL慢查询的原因分析

7个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!