mysql - 定期将数据加载到表中的最佳方法是什么

标签 mysql performance myisam load-data-infile

我有一个包含静态表的数据库,需要每周从 CSV 更新。 表是 Mysql MyISAM 并且静态我的意思是它们只用于只读(显然从 CVS 更新时除外)。

每周有大约 50 个表和总共大约 200mb 的数据要重新加载。

我可以考虑 3 种方法:

  1. 截断表格
  2. 从文件加载数据

或者

  1. 为每个表创建一个临时表
  2. 在那里加载数据
  3. 截断(或删除行?)原始表
  4. 从临时表中选择 * 插入到原始表中。

或者

  1. 创建 table_new 并加载数据
  2. 将原始表重命名为 table_old(或完全删除表)
  3. 将 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/

相关文章:

mysql - 让 Hibernate 尊重 MySQL 和 PostgreSQL 中的序列

php - 在多个连接中引用同一行

Wordpress InnoDB 和 MyISAM 表

innodb - Cpanel sql 备份失败

mysql - 在 AWS RDS 上混合使用 MyISAM 和 InnoDB 的问题

php - WordPress 显示按自定义分类过滤的 CPT

MySQL 和 pymysql 一起消失了

c - 什么是好的多核 64 位 "Hello World"程序?

svn - 巨大的 svn checkout 使 apache (dav_svn) 消耗了服务器上的所有内存——有什么提示吗?

linux - 查找有关CPU负载类型的更多信息