Sql 加载数据填充+;禁用/启用密钥性能

Sql 加载数据填充+;禁用/启用密钥性能,sql,mysql,load-data-infile,Sql,Mysql,Load Data Infile,我有一张大约700万行的桌子。一天一次,我需要批量导入大约200000个新行到这个表中。为此,我首先禁用表上的键,使用加载数据填充,然后重新启用表上的键 我遇到的问题是ALTER TABLE my_TABLE ENABLE KEYS语句。 大约需要15分钟才能完成。我试图通过增加myisam\u sort\u buffer\u size来提高性能,但似乎没有任何帮助。还有其他想法吗?你可以试试外部MySQL工具,比如mysqladmin和myisamchk。它们位于/usr/local/mysq

我有一张大约700万行的桌子。一天一次,我需要批量导入大约200000个新行到这个表中。为此,我首先禁用表上的键,使用
加载数据填充
,然后重新启用表上的键

我遇到的问题是
ALTER TABLE my_TABLE ENABLE KEYS
语句。

大约需要15分钟才能完成。我试图通过增加
myisam\u sort\u buffer\u size
来提高性能,但似乎没有任何帮助。还有其他想法吗?

你可以试试外部MySQL工具,比如mysqladmin和myisamchk。它们位于/usr/local/mysql/bin路径中,用于常规安装

MySQL网站的解决方案路径:

  • 执行FLUSH TABLES语句或mysqladmin FLUSH TABLES命令

  • 使用myisamchk--keys used=0-rq/path/to/db/tbl_name。这将删除所有 使用表的索引

  • 使用加载数据填充将数据插入表中。这不会更新任何内容 索引,因此速度非常快

  • 如果您打算以后只从表中读取,请使用myisampack 压缩它。见第13.4.3.3节, “压缩表特征”

  • 用myisamchk-rq/path/to/db/tbl_名称重新创建索引。这将在之前在内存中创建索引树 将其写入磁盘,这非常重要 更新索引的速度更快 加载数据填充,因为它避免了 大量的磁盘搜索。结果 索引树也是完全平衡的

  • 执行FLUSH TABLES语句或mysqladmin FLUSH TABLES命令


假设您希望最大限度地减少由于表被锁定而导致的停机时间,我认为标准的步骤是克隆表,在克隆中执行插入操作(根据您的具体情况,使用或不使用禁用键),完成后,发出
删除表tableName;如果未更新表索引的基数值,请将表tableClone重命名为tableName

,myisamchk-rqa/path/TO/db/tbl_名称选项将正常工作。请注意,使用
ALTER TABLE DISABLE KEYS
(和
…ENABLE KEYS
)与使用
myisamchk
命令相同(如果有差异,我有点困惑,然后阅读MySQL文档的其余部分)