【发布时间】:2009-03-19 16:13:59
【问题描述】:
我正朝着优化 90GB+ 表迈出一步:
旧表
每天桌子抓取大约。来自外部来源的 750,000 条记录,并将它们添加到具有新日期的表中。据我了解,这种情况已经持续了三年。 97% 的记录不会从一天到另一天发生变化。
新建表格
我正在尝试遍历旧表(数百万条记录)并消除冗余,这可能会显着减小表大小。
旧表
- 日期
- record_id
- data_field(确实有很多字段,但为了示例)
new_table_index
- 日期
- index_id
新表
- index_id
- record_id
- 数据字段
遍历 old_table 中每条记录的逻辑
if (record_id is not in new_table) or (record_id is in new_table, but the latest entry has a different data_field)
将其插入 new_table 并获取 index_id
其他
从 new_table_index 中获取该 record_id 的最新条目 index_id
总是
将 index_id 和日期插入 new_table_index
对最佳方法有什么想法吗?我对 MySQL 不够先进,无法将所有这些放在一起。当我尝试用 PHP 编写脚本时,它耗尽了 3GB 的内存,然后失败了。其他建议或疑问???非常感谢!
【问题讨论】:
-
能否请您发布一些 old_table 的示例数据以及您希望在 new_table 和 new_table_index 中获得什么?
-
一条记录在多个日期的record_id是否一致?
-
听起来就像我以前为浏览器行星游戏运行搜索引擎的时候。数以千计的行星 = 每次更新都会增加数以千计的新行。