2016-05-16 85 views
0

让我们考虑下表。在MySQL中的性能比较由MySQL

表:

ID 
epoch_time_in_millis 
counter 

查询#1:

SELECT 
DATE_FORMAT(FROM_UNIXTIME(epoch_time_in_millis/1000),"%Y-%m-%d") date, 
SUM(counter) totalCount 
FROM my_table 
GROUP BY date 

查询#2:

SELECT 
(epoch_time_in_millis DIV 86400000) * 86400000 ms, 
SUM(counter) totalCount 
FROM my_table 
GROUP BY (epoch_time_in_millis DIV 86400000) * 86400000; 

我的问题是: 上述两个查询是否会显示性能差异?

如果是,请让我明白为什么。 如果不让我明白为什么。 :p

在此先感谢。

回答

0

检查性能的最佳方法是在硬件上使用您的数据。

但是,MySQL使用文件排序算法实现了group by。这个算法通常不会利用索引,特别是在你的情况下。因此,这两个查询的工作将用于处理聚合。

其他操作是微不足道的。因此,无论引擎是否执行一次或两次计算,都不会与整体计算相关 - 除非您只有少数几行。而且,在这种情况下,表现并不是真正的问题。

+0

感谢您的回答。让我们考虑一下表中有数百万行。上述两个查询的性能还是不一样的?由于第二个查询涉及乘法和除法操作,我猜想这两个实际上在长期运行中是不同的。你能澄清一下吗? @GordonLinoff –

+0

@AnonymousOne。 。 。通常,在三级存储中获取和管理记录的开销比每个查询的几个算术操作要大得多。肯定的情况是,情况并非如此(例如,对于用户定义的函数或对于非常长的字符串的函数),但是这种性质通常是过度优化的。 –

+0

我在同一个数据集(〜100K行)上分别运行了这两个查询。在连续10000次运行中,查询#2总是优于查询#1。查询#1所花费的运行时间总是比查询#2花费的时间大2.5倍。 –