【问题标题】:MySQL Table Setup for today, yesterday, monthly logs今天、昨天、每月日志的 MySQL 表设置
【发布时间】:2012-04-01 22:49:25
【问题描述】:

我正在开发一个 PHP / MySQL 统计记录程序,并试图为它找到最佳的 MySQL 数据库结构。

访问者可以在其中看到最新的统计数据(即最新的 20 个条目),还可以查看今天的总体、昨天的总体、过去 7 天的总体和过去 30 天的总体统计。

从我提取的数据中,实时统计数据将每 60 秒更新一次,每次更新至少有 10 个新条目。

我的逻辑设置两个表是否正确...一个充当“今天的”统计数据,另一个充当整体存档...例如:

todays_stats
身份证
来自_url
入口日期

overall_stats
身份证
来自_url
入口日期

然后为每个新条目重复插入,但通过 cron 作业在每晚午夜截断 todays_stats?

或者有更有效的方法吗?

【问题讨论】:

  • 一个表会更好,然后使用查询来获取您想要的数据。您可以使用 GROUP BY 获取每日或每周或任何其他统计信息。

标签: php mysql database-design


【解决方案1】:

这取决于您的每日统计行数、是否删除历史数据以及您拥有多少索引。我们需要删除历史数据,并且有 7~8 个索引和大量的 stat 数据,所以我们将数据分成每日表并编写存储过程来获取数据(前一天、前 7 天、前 30 天等)。删除表比DELETE FROM table WHERE index=6-month-old-data快得多

【讨论】:

    【解决方案2】:

    我认为最好的方法是保留一张保存当前数据集的表格,然后您将拥有单独的表格用于整体统计数据,并在午夜将所有数据从当前表格插入到整体表格中

    INSERT INTO `overall` SELECT * FROM `current`
    

    查询。然后你会在数据复制成功后截断当前表。

    【讨论】:

    • 谢谢亚历克斯!今晚将使用示例数据尝试一下,看看它的表现如何。
    猜你喜欢
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多