代码之家  ›  专栏  ›  技术社区  ›  Josh Bush

在MySQL中生成海量数据集报表的最有效方法

  •  0
  • Josh Bush  · 技术社区  · 6 年前

    我需要为我正在工作的应用程序构建一个报告接口,这需要管理员随着时间的推移可视化大量收集的数据。

    想想类似于谷歌分析等的东西。

    需要可视化的大多数数据都位于一个基本表中,该表包含日期时间、“action”varchar和其他可筛选数据-当前该表包含150万行,并且每天都在增长。

    目前我正在做一个简单的选择,按天分组应用过滤器,它运行得很好,但我想知道是否有一种更智能、更有效的方法来提取这些数据。

    干杯

    3 回复  |  直到 16 年前
        1
  •  2
  •   SquareCog    16 年前

    1)两层——原始数据和汇总数据。对于原始数据,索引可能没有帮助。您正在进行聚合,在大多数情况下需要进行全表扫描。如果没有,重新组织,它会更快。

    2)找出您的聚合,自动生成它们,并从聚合数据中运行报告。索引这些汇总表!

    3)避免连接。聚合,具体化group bys的结果,然后加入聚合结果。

    4)分区。将数据与另一天的数据分开一天(或任何有意义的粒度)。如果需要,可以制作自动表创建脚本(长大后——或者功能很重,这取决于您的观点——数据库提供了一种称为“分区”的东西,以便以更明智的方式完成这项工作)。

    5)阅读“数据仓库” http://en.wikipedia.org/wiki/Data_warehouse

        2
  •  1
  •   Srikar Doddi    16 年前

    你可以开始做两件事:

    1. 确保在所有过滤器上添加索引,这样它们就不会进行任何表扫描。

    2. 使用查询计划分析器进行检查,以确保没有需要优化的地方。

    3. 由于您的表中有一个日期时间戳,分区在将来一定会对您有所帮助。

    祝你好运。

        3
  •  0
  •   Joel    16 年前

    您可以期望一些常见的查询,与可以生成的过滤器的唯一组合的数量相比,可能只有一小部分。您可以使用它将数据“压缩”到相应的表中,并在夜间运行这个收集过程。