我有一张大约有700万行的表格。每天一次,我需要在此表中批量导入大约200,000个新行。为此,我首先使用LOAD DATA INFILE
禁用表上的键,然后重新启用表上的键。
我遇到的问题是ALTER TABLE my_table ENABLE KEYS
声明
大约需要15分钟才能完成。我试图通过增加myisam_sort_buffer_size
来提高性能,但似乎没有帮助。还有其他想法吗?
答案 0 :(得分:3)
您可以尝试使用mysqladmin和myisamchk等外部MySQL工具。它们位于/ usr / local / mysql / bin路径中,用于常规安装。
来自MySQL网站的解决方案路径:
执行FLUSH TABLES语句或mysqladmin flush-tables命令。
使用myisamchk --keys-used = 0 -rq / path / to / db / tbl_name。这将删除所有 使用表的索引。
使用LOAD DATA INFILE将数据插入表中。这不会更新任何 索引因此非常快。
如果您打算将来只读取该表,请使用myisampack 压缩它。见13.4.3.3节, “压缩表特性”。
使用myisamchk -rq / path / to / db / tbl_name重新创建索引。这之前在内存中创建了索引树 把它写到磁盘上,这很多 更快地更新索引期间 LOAD DATA INFILE因为它避免了 大量的磁盘寻求。所结果的 索引树也完美平衡。
执行FLUSH TABLES语句或mysqladmin flush-tables命令。
答案 1 :(得分:1)
假设您希望最大程度地减少因锁定表而导致的停机时间,我相信标准程序是克隆表,在克隆中执行插入(根据您的具体情况,根据具体情况使用或不禁用密钥),并且一旦完成,发出DROP TABLE tableName;RENAME TABLE tableClone TO tableName