MYSQL按日期分组性能查询
我目前正在编写一个查询,它将在MySQL数据库中的MYISAM表上运行多次 该查询需要大量(可能是多达100000+)行,并获得每月总计。我当前使用的SQL是MYSQL按日期分组性能查询,mysql,performance,query-optimization,Mysql,Performance,Query Optimization,我目前正在编写一个查询,它将在MySQL数据库中的MYISAM表上运行多次 该查询需要大量(可能是多达100000+)行,并获得每月总计。我当前使用的SQL是 SELECT DATE_FORMAT(ct_cdatetime, "%m-%Y") AS Month, SUM(ct_total), SUM(ct_charge) FROM client_transaction WHERE (...omitted for this example...) GROUP BY DATE_FORMAT(ct_c
SELECT DATE_FORMAT(ct_cdatetime, "%m-%Y") AS Month, SUM(ct_total), SUM(ct_charge)
FROM client_transaction
WHERE (...omitted for this example...)
GROUP BY DATE_FORMAT(ct_cdatetime, "%m-%Y") ORDER BY ct_cdatetime ASC
我知道强制MySQL将日期转换为字符串的性能问题。练习是否更快和/或更好
- 1) 就这样吧
- 2) 选择所有行并在PHP中将它们分组 数组李>
- 3) 在数据库中有一个month-year int字段,并更新此字段 当我添加行时(例如2014年7月的714行)
然而,应用程序端的内存算法可能比数据库端的更通用的算法更快。在应用程序端执行工作可能会更快。以下查询更快,因为它只是提取日期的组成部分,而不是创建格式化文本:
SELECT YEAR(dtfield), MONTH(dtfield), COUNT(*)
FROM mytable
GROUP BY YEAR(dtfield), MONTH(dtfield);
请记住,在使用函数时,MySQL不能对
分组依据
标准使用任何索引优化。如果您有一个大表并且需要此计算,通常会为它们创建单独的索引列(如)。将您的月/年信息存储在单独的列中,并在其上设置索引(如果这是一个常用的或时间关键型查询)。