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:过滤组视图与内联选择的主要内容,如果未能解决你的问题,请参考以下文章

如何仅显示与视图 2 中关联的节点的分类术语?

使用内联方式展示Razor视图

MySQL视图查询超慢,求解答

Sharepoint 2010列表视图阈值和项级别权限

内联函数和视图之间的区别

内联表值 UDF 与视图 - 使用哪个?