使用 Load Data Infile 优化 MySQL 数据导入
将大型数据集导入 MySQL 表可能是一项耗时的任务。使用“加载数据到文件中...”命令时,平衡速度和数据完整性可能具有挑战性。这个问题探讨了提高此类导入性能的方法,特别是对于带有键的表。
提高导入速度
问题中提到的主要问题是慢键导入数据后创建,无需密钥。要解决此问题:
-
对 CSV 文件进行排序: 按照表主键的顺序排列 CSV 文件中的数据。这有助于 Innodb 利用其集群主键结构来加快加载速度。
-
禁用约束: 暂时禁用唯一键和外键检查以减少加载期间的开销。使用命令 set unique_checks = 0;并设置foreign_key_checks = 0;。
-
禁用二进制日志记录:关闭二进制日志记录(设置sql_log_bin = 0;)以绕过日志记录以提高性能。
-
拆分大文件: 将大 CSV 文件分成较小的块并单独加载。这可以减少内存消耗并加快进程。
加速密钥创建
加载数据后,重建密钥可能是一个漫长的操作。这里有一些建议:
-
批量插入:在 LOAD DATA INFILE 语句中使用 BULK INSERT 子句一次性导入带有键的数据。
-
自适应哈希索引:启用自适应哈希索引(innodb_adaptive_hash_index=ON) 以加快常用查询的索引创建速度。
-
并行索引: 如果可能,请使用并行索引 (innodb_parallel_alter=ON) 为索引创建创建多个线程(可能)减少所用时间。
终止慢速查询
要终止终止后继续运行的慢速查询,请考虑:
-
重试连接:断开并重新连接到 MySQL 服务器以优雅地结束查询。
-
使用查询 ID: 识别使用 SHOW PROCESSLIST 查看查询的 ID,并使用 KILL [QUERY_ID] 终止它。
-
重新启动 MySQL: 作为最后的手段,重新启动 MySQL 将终止所有正在运行的查询。但是,它可能会导致服务中断。
以上是如何使用带键表的 Load Data Infile 优化 MySQL 数据导入?的详细内容。更多信息请关注PHP中文网其他相关文章!