我有一个非常大的数据库(每天都会添加新信息),建立了一个用于在线搜索数据库的小型cakePHP应用程序。因为它太大而且很慢,我想用新的数据库暂存数据:
- only the last 12 months
- converts the serial varchar field data into INT (for sorting and "in btw" searches)
- Only take numeric serials less than 5 numbers (< 99999)
OLD DATABASE
id(key) serial (varchar) Date(datetime)
-------- ----------- --------------
1 12345 2011-02-15 23:50:26
2 12345678 2008-12-15 23:50:26
3 abc45 2009-12-15 23:50:26
新数据库
id(key) serial (INT) Date(datetime)
-------- ----------- --------------
1 12345 2011-02-15 23:50:26
。 我需要一个MYSQL脚本,我可以安排每天运行并将新条目(具有上述条件)附加到新数据库并将此数据库用于cakePHP应用程序
答案 0 :(得分:1)
首次运行初始导入后,您可以执行每日脚本:
第一个脚本,导入12个月的数据:
INSERT INTO new_database.table_name (serial, date)
SELECT old.serial, old.date
FROM old_database.table_name old
WHERE old.date > DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
AND LENGTH(old.serial) < 6;
每日脚本,只需导入前24小时:
INSERT INTO new_database.table_name (serial, date)
SELECT old.serial, old.date
FROM old_database.table_name old
WHERE old.date > DATE_SUB(CURDATE(), INTERVAL 24 HOUR)
AND LENGTH(old.serial) < 6;
我将您的序列号长度标准解释为5个字符或更少(&lt; 6),因为您的示例有5个数字。
如果每日脚本没有准确按时运行,为避免跳过或重复,您可能需要稍微编辑脚本。例如,如果序列号是唯一的,则可以通过仅选择新数据库表中尚不存在的序列号来避免插入重复记录。
答案 1 :(得分:0)
所以你需要一个cakePHP可以解决的新表。这可以通过triggers来维护,因此对大表和慢表的任何更改也会改变小而快的表。
然后你需要不时地删除旧条目(你只需要担心旧条目,那些带有不良连续剧的条目)。您可以将它作为任何触发器的背驮式或作为每晚运行的单独脚本。更漂亮的是将它作为一个mysql内部事件。