MySQL:过滤组视图与内联选择
Posted
技术标签:
【中文标题】MySQL:过滤组视图与内联选择【英文标题】:MySQL: Filter group view vs. inline select 【发布时间】:2015-10-21 11:16:56 【问题描述】:我只是对 mysql (5.5) 数据库上的汇总查询的性能感到好奇。
我有一张桌子:timestamp | category | value
。
现在我尝试
-
将时间戳舍入到一小时的 5 分钟
按一天的时间戳过滤(非常有选择性)
用四舍五入的时间戳和类别分组并取平均值
数据库服务器 1) 动态构建 sql 或 2) 制作一个按以下方式进行分组的视图是否更便宜然后过滤一天?
我的工作解决方案现在是 1),但从维护的角度来看,我更喜欢 2) 的想法。
或者也许有人可以指出一个免费、快速的解决方案来比较两种可能性的成本。
非常感谢提前和最好的问候, 马丁
【问题讨论】:
【参考方案1】:最有效的方法是过滤到一天,然后完成工作。
这是这样的:
select date_format(timestamp, '%Y-%m-%d %H'), floor(minute(timestamp) / 12),
category, avg(value)
from t
where timestamp >= '2015-01-01' and timestamp < '2015-01-02'
group by date_format(timestamp, '%Y-%m-%d %H'), floor(minute(timestamp) / 12)
order by min(timestamp);
注意where
子句。它使用不等式,因此您可以在t(timestamp)
上使用索引。
【讨论】:
这正是我现在正在做的,谢谢@gordon,作为一个信息,我将时间戳转换为 unix 时间戳(因为它的实际日期)做一个模在它上面并转换回来。我觉得这对 group by 来说表现更好。 @martin 。 . . group by 受文件排序的支配,我不认为一点数据算术 - 一种或另一种方式 - 真的会有所作为。以上是关于MySQL:过滤组视图与内联选择的主要内容,如果未能解决你的问题,请参考以下文章