首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL按日期分组性能查询

问MYSQL按日期分组性能查询
EN

Stack Overflow用户
提问于 2014-07-06 17:25:09
回答 2查看 2.5K关注 0票数 1

我目前正在编写一个查询,该查询将在MySQL DB中的MYISAM表上多次运行。

该查询需要很多行(可能是100,000+上的任何内容),并获得每月总计。我目前使用的SQL是

代码语言:javascript
复制
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)在数据库中有一个月份int字段,并在我添加行时更新这个字段(例如,2014年7月的714 )?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-06 17:39:13

对于哪一个是最快的问题,答案很简单:尝试两者并进行测量。

SQL端的性能实际上不受日期转换的影响。它是由group by决定的,特别是排序。

我对传输数据和在应用程序端完成工作是否更快表示怀疑。特别是,您必须将大量(ish)数据从数据库传输到应用程序。然后,您必须在应用程序中复制将在数据库中完成的工作。

然而,应用程序端的内存中的算法可能比数据库端的更通用的算法更快。在应用程序端完成工作可能会更快。

票数 1
EN

Stack Overflow用户

发布于 2015-04-09 10:24:10

以下查询速度更快,因为它只提取日期的组件,而不是创建格式化文本:

代码语言:javascript
复制
SELECT YEAR(dtfield), MONTH(dtfield), COUNT(*)
FROM mytable
GROUP BY YEAR(dtfield), MONTH(dtfield);

请记住,MySQL在使用函数时不能对GROUP BY条件使用任何索引优化。如果您有一个大表,并且需要这样的计算,那么通常会为它们创建单独的索引列(如noticed by hellcode)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24598396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档