【问题标题】:MySQL: Filter group view vs. inline selectMySQL:过滤组视图与内联选择
【发布时间】:2015-10-21 11:16:56
【问题描述】:

我只是对 mysql (5.5) 数据库上的汇总查询的性能感到好奇。

我有一张桌子:timestamp | category | value

现在我尝试

  1. 将时间戳舍入到一小时的 5 分钟
  2. 按一天的时间戳过滤(非常有选择性)
  3. 用四舍五入的时间戳和类别分组并取平均值

数据库服务器 1) 动态构建 sql 或 2) 制作一个按以下方式进行分组的视图是否更便宜然后过滤一天?

我的工作解决方案现在是 1),但从维护的角度来看,我更喜欢 2) 的想法。

或者也许有人可以指出一个免费、快速的解决方案来比较两种可能性的成本。

非常感谢提前和最好的问候, 马丁

【问题讨论】:

    标签: mysql sql select view group-by


    【解决方案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 受文件排序的支配,我不认为一点数据算术 - 一种或另一种方式 - 真的会有所作为。
    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多