当前位置: 首页 > news >正文

MySQL 中快速插入大量数据

在 MySQL 中快速插入大量数据(例如 20 万条记录)可以通过多种方法实现。以下是一些优化技巧和步骤,可以帮助你高效地插入大量数据:

1. 禁用索引和约束(如果可能)


在插入大量数据之前,禁用索引和外键约束可以显著提高插入速度。在插入完成后,再重新启用它们并重建索引。

sql
-- 禁用外键约束
SET foreign_key_checks = 0;
 
-- 禁用唯一性检查
SET unique_checks = 0;
 
-- 禁用自动提交
SET autocommit = 0;
 
-- 禁用索引更新(对于MyISAM)
-- ALTER TABLE your_table DISABLE KEYS;


2. 使用批量插入


批量插入可以显著减少插入操作的开销。例如,使用 INSERT INTO ... VALUES (...), (...), ... 语法。

sql
INSERT INTO your_table (column1, column2, column3)
VALUES
    (value1_1, value1_2, value1_3),
    (value2_1, value2_2, value2_3),
    -- 继续添加更多行,直到达到合理的批量大小(如几千行)
    (valueN_1, valueN_2, valueN_3);


3. 使用事务


在事务中执行批量插入可以减少每次提交的开销。

sql
START TRANSACTION;
 
-- 批量插入语句
INSERT INTO your_table (column1, column2, column3)
VALUES
    (value1_1, value1_2, value1_3),
    -- 继续添加更多行
    (valueN_1, valueN_2, valueN_3);
 
COMMIT;


4. 禁用二进制日志(如果不需要复制或恢复点)


如果你的数据库不需要复制或增量备份,可以临时禁用二进制日志。

sql
SET sql_log_bin = 0;
注意: 禁用二进制日志后,数据库将无法进行增量备份或复制操作,请谨慎使用。

5. 调整 MySQL 配置


根据需要调整 MySQL 配置,以提高插入性能。例如,增加 innodb_buffer_pool_size、innodb_log_file_size 和 innodb_flush_log_at_trx_commit。

6. 使用 LOAD DATA INFILE


对于非常大的数据集,使用 LOAD DATA INFILE 可以比 INSERT 语句快得多。

sql
LOAD DATA INFILE '/path/to/your/file.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;


7. 重新启用索引和约束


在插入完成后,重新启用之前禁用的索引和外键约束。

sql
-- 启用外键约束
SET foreign_key_checks = 1;
 
-- 启用唯一性检查
SET unique_checks = 1;
 
-- 启用自动提交
SET autocommit = 1;
 
-- 启用索引更新(对于MyISAM)
-- ALTER TABLE your_table ENABLE KEYS;
示例脚本
以下是一个综合示例脚本,用于快速插入 20 万条数据:

sql
-- 禁用外键约束、唯一性检查和自动提交
SET foreign_key_checks = 0;
SET unique_checks = 0;
SET autocommit = 0;
 
-- 开始事务
START TRANSACTION;
 
-- 批量插入(示例,这里只展示少量数据,实际应扩展到 20 万条)
INSERT INTO your_table (column1, column2, column3)
VALUES
    (value1_1, value1_2, value1_3),
    (value2_1, value2_2, value2_3),
    -- 重复插入直到达到 20 万条数据
    -- ...
    (value200000_1, value200000_2, value200000_3);
 
-- 提交事务
COMMIT;
 
-- 启用外键约束、唯一性检查和自动提交
SET foreign_key_checks = 1;
SET unique_checks = 1;
SET autocommit = 1;
注意事项
备份数据:在进行批量插入之前,务必备份你的数据,以防数据丢失或损坏。
测试环境:先在测试环境中验证这些操作,以确保它们不会影响生产环境的性能和稳定性。
监控性能:监控数据库的性能,确保批量插入操作不会对数据库服务器造成过大的负载。
通过这些优化技巧,你应该能够高效地插入 20 万条数据到 MySQL 数据库中。

http://www.lryc.cn/news/507897.html

相关文章:

  • 腾讯云智能结构化OCR:以多模态大模型技术为核心,推动跨行业高效精准的文档处理与数据提取新时代
  • 最大似然检测在通信解调中的应用
  • SKETCHPAD——允许语言模型生成中间草图,在几何、函数、图算法和游戏策略等所有数学任务中持续提高基础模型的性能
  • [JAVA备忘录] Lambda 表达式简单介绍
  • [python]使用flask-caching缓存数据
  • 裸机按键输入实验
  • GaussDB运维管理工具(二)
  • 【HarmonyOS之旅】HarmonyOS开发基础知识(一)
  • Mysql数据究竟是如何存储的
  • STM32单片机使用CAN协议进行通信
  • Docker 入门:如何使用 Docker 容器化 AI 项目(二)
  • MVVM、MVC、MVP 的区别
  • 【Verilog】期末复习
  • C#都可以找哪些工作?
  • 机器学习Python使用scikit-learn工具包详细介绍
  • 蓝桥杯真题 - 扫雷 - 题解
  • vue3项目结合Echarts实现甘特图(可拖拽、选中等操作)
  • Log4j2 插件的简单使用
  • Linux之RPM和YUM命令
  • 读取硬件板子上的数据
  • Cesium 实例化潜入潜出
  • java引入jedis并且关于开放redis端口问题
  • 【人工智能】用Python实现情感分析:从简单词典到深度学习方法的演进
  • 关系型数据库的完整性和一致性
  • 设计模式の命令访问者迭代器模式
  • 信息系统项目管理 -冲突管理
  • Gmsh有限元网格剖分(Python)---点、直线、平面的移动
  • 山景BP1048增加AT指令,实现单片机串口控制播放音乐(一)
  • SMMU软件指南SMMU编程之全局错误和最小配置
  • CPU条件下Pytorch、jupyter环境配置