根据日期在MySQL服务器上自动创建表?

时间:2010-01-04 18:55:19

标签: sql mysql database-design cron data-modeling

MySQL是否等同于cron

我有一个PHP脚本,可以根据月份和年份查询表格,例如:

SELECT * FROM data_2010_1

到目前为止我一直在做的是,每次脚本执行时都会对表进行查询,如果存在,则执行工作,如果不存在则创建表。

我想知道我是否可以在MySQL服务器本身上设置一些东西,它将在月初的午夜时分创建表格(基于默认表格)。


更新

根据我得到的评论,我认为这不是实现目标的最佳方式。所以这里还有两个问题:

  1. 如果我有一个每月添加数千行的表,这可能会拖累资源吗?如果是这样,分区这个表的最佳方法是什么,因为上面是禁止的?

  2. 我最初想到的本土方法存在哪些潜在问题?

6 个答案:

答案 0 :(得分:3)

如果我有一个每月添加数千行的表,这可能会拖累资源吗?


如果您按月分组,则行数相同。数据库处理数百万行 - 这不是问题。

我最初想到的本土方法存在哪些潜在问题?


首先是屁股的痛苦,加入12个表只是为了总结一年与一张桌子的细节。需要更多的基础设施和维护以确保记录在正确的表格中。

答案 1 :(得分:1)

相反,如果一个表具有月份和年份列,或者更好的是您可以查询的时间戳。

答案 2 :(得分:0)

查看从MySQL 5.1开始提供的事件调度程序:

http://dev.mysql.com/doc/refman/5.1/en/events.html

答案 3 :(得分:0)

原始“预定表格创建”的目标是什么?您是否担心将所有数据保存在线?出于某种安全原因,您是否想删除上个月的数据?

如果您确实需要将这些月份分开,那么“计划表创建”的想法会出现同步问题。安排午夜活动并不能保证它会在午夜完成。那么,如果预先创建的创建恰好发生在早期用户盲目进行预期当前表存在的查询之后,您将要做什么?因此,将空表创建保留在与查询相同的位置是一个更好的主意。

好的,您可以在午夜之前安排创建。但是,如果在未来的日期在线使用空表不是问题,为什么不提前一年或两年手动创建表?

答案 4 :(得分:0)

  

如果我有一张数千张桌子   每月添加的行,是这个   可能拖累资源?如果   那么,什么是分区的最佳方式   这个表,因为上面是   禁止的?

当然,它使用资源,因为您向数据库添加数据/信息。它不是对资源的拖累比拥有不同的表更大 - 它应该更少 - 因为每个表都有与维护表相关的开销。

分区问题

我不认为它是“分区”,但它完全取决于您的数据以及您如何使用数据。在任何SQL系统中,您都可以根据列或列组合进行预索引。当您预先索引时,您基本上是“分区”。因此,如果您知道您将在大多数时间根据日期(例如月/年)查看数据,那么您可以在日期字段中添加索引。从抽象的角度来看,这是在日期上对数据进行分区。您创建的索引取决于您将如何使用数据 - 您创建的越多,用于维护索引的时间/空间越多,但使用索引的语句的性能越快。

答案 5 :(得分:0)

UPDATE pageviews SET 
        yesterday = CASE WHEN last_update_time > xxx_ts THEN yesterday ELSE today END,
        today     = CASE WHEN last_update_time > xxx_ts THEN today + 1 ELSE 1     END, 
        acc = acc + 1, last_update_time = UNIX_TIMESTAMP() WHERE page_id = 'xxx';

http://tech.shreeni.info/2010/01/conditional-mysql-statements-lifesaver.html

facebook.com/zahoor80