我目前正在编写一个查询,该查询将在MySQL DB中的MYISAM表上多次运行。
该查询需要很多行(可能是100,000+上的任何内容),并获得每月总计。我目前使用的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_cdatetime, "%m-%Y") ORDER BY ct_cdatetime ASC我知道强迫MySQL将日期转换为字符串的性能问题。是更快和/或更好的实践
发布于 2014-07-06 17:39:13
对于哪一个是最快的问题,答案很简单:尝试两者并进行测量。
SQL端的性能实际上不受日期转换的影响。它是由group by决定的,特别是排序。
我对传输数据和在应用程序端完成工作是否更快表示怀疑。特别是,您必须将大量(ish)数据从数据库传输到应用程序。然后,您必须在应用程序中复制将在数据库中完成的工作。
然而,应用程序端的内存中的算法可能比数据库端的更通用的算法更快。在应用程序端完成工作可能会更快。
发布于 2015-04-09 10:24:10
以下查询速度更快,因为它只提取日期的组件,而不是创建格式化文本:
SELECT YEAR(dtfield), MONTH(dtfield), COUNT(*)
FROM mytable
GROUP BY YEAR(dtfield), MONTH(dtfield);请记住,MySQL在使用函数时不能对GROUP BY条件使用任何索引优化。如果您有一个大表,并且需要这样的计算,那么通常会为它们创建单独的索引列(如noticed by hellcode)。
https://stackoverflow.com/questions/24598396
复制相似问题