我有一个包含静态表的数据库,需要每周从 CSV 更新。 表是 Mysql MyISAM 并且静态我的意思是它们只用于只读(显然从 CVS 更新时除外)。
每周有大约 50 个表和总共大约 200mb 的数据要重新加载。
我可以考虑 3 种方法:
- 截断表格
- 从文件加载数据
或者
- 为每个表创建一个临时表
- 在那里加载数据
- 截断(或删除行?)原始表
- 从临时表中选择 * 插入到原始表中。
或者
- 创建 table_new 并加载数据
- 将原始表重命名为 table_old(或完全删除表)
- 将 table_new 重命名为原始表
您认为最有效的方法是什么?
最佳答案
您是否考虑过使用 mysqlimport?你可以在这里读到它: http://dev.mysql.com/doc/refman/5.1/en/mysqlimport.html
我可能不会删除原始表,因为那样的话你必须重新创建所有的外键、索引、约束等,这是一个困惑和维护的噩梦。重命名表也会导致问题(比如如果你有表的同义词,我不确定 mysql 是否有同义词)。
然而,我会做的是在加载数据之前禁用键。
ALTER TABLE tbl_name DISABLE KEYS
换句话说,当加载数据时,您不希望它尝试更新索引,因为这会减慢加载速度。您希望在加载完成后更新索引。
所以我认为通过将 mysqlimport 与上面的提示相结合,您应该能够获得真正高效的加载。
关于mysql - 定期将数据加载到表中的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1972944/