首页
学习
活动
专区
圈层
工具
发布

mysql 批量插入数据性能

基础概念

MySQL 批量插入数据是指在一次数据库操作中插入多条记录,而不是逐条插入。这种操作可以显著提高数据插入的性能,因为它减少了与数据库服务器之间的通信次数。

相关优势

  1. 减少网络开销:批量插入减少了网络传输的数据量,从而降低了网络延迟。
  2. 减少磁盘I/O操作:批量插入减少了磁盘的读写次数,提高了磁盘I/O效率。
  3. 减少事务开销:批量插入可以减少事务的开启和提交次数,提高事务处理的效率。
  4. 提高CPU利用率:批量插入可以更有效地利用CPU资源,减少CPU的空闲时间。

类型

  1. 使用 INSERT INTO ... VALUES (...), (...), ... 语法
  2. 使用 INSERT INTO ... VALUES (...), (...), ... 语法
  3. 使用 LOAD DATA INFILE 语法
  4. 使用 LOAD DATA INFILE 语法

应用场景

  1. 数据迁移:在将数据从一个数据库迁移到另一个数据库时,批量插入可以显著提高迁移速度。
  2. 日志记录:在高并发环境下,批量插入可以用于高效地记录日志数据。
  3. 批量数据处理:在需要对大量数据进行插入操作时,批量插入可以提高处理效率。

常见问题及解决方法

问题1:批量插入数据时性能不佳

原因

  1. 网络延迟:网络传输速度慢,导致数据传输时间过长。
  2. 磁盘I/O瓶颈:磁盘读写速度慢,导致数据插入速度受限。
  3. 事务处理开销:频繁的事务开启和提交操作增加了系统开销。

解决方法

  1. 优化网络配置:确保网络带宽充足,减少网络延迟。
  2. 使用SSD:使用固态硬盘(SSD)替代机械硬盘(HDD),提高磁盘I/O性能。
  3. 减少事务开销:尽量减少事务的开启和提交次数,可以考虑使用批量提交的方式。

问题2:批量插入数据时出现部分失败

原因

  1. 数据完整性约束:插入的数据违反了表的约束条件(如唯一性约束、外键约束等)。
  2. 服务器资源不足:服务器CPU、内存或磁盘空间不足,导致插入操作失败。

解决方法

  1. 检查数据完整性:在插入数据前,确保数据符合表的约束条件。
  2. 优化服务器资源:增加服务器CPU、内存或磁盘空间,确保服务器资源充足。
  3. 使用 IGNOREREPLACE 关键字
  4. 使用 IGNOREREPLACE 关键字

参考链接

通过以上方法,可以有效提高MySQL批量插入数据的性能,并解决常见的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL批量插入数据库实现语句性能分析

允许我们在一条sql语句中批量插入数据,如下sql语句: INSERT INTO example (example_id, name, value, other_value) VALUES...第二种方法:使用事务提交,批量插入数据库(每隔10W条提交下)最后显示消耗的时间为:22:56:13 23:04:00 ,一共8分13秒 ,代码如下: echo date("H:i:s"); $...SQL语句:将SQL语句进行拼接,使用 insert into table () values (),(),(),()然后再一次性插入,如果字符串太长,   则需要配置下MYSQL,在mysql 命令行中运行...:set global max_allowed_packet = 2*1024*1024*10;消耗时间为:11:24:06 11:25:06;   插入200W条测试数据仅仅用了1分钟!...->query($sql);   最后总结下,在插入大批量数据时,第一种方法无疑是最差劲的,而第二种方法在实际应用中就比较广泛,第三种方法在插入测试数据或者其他低要求时比较合适,速度确实快。

4.9K10
  • MySQL 批量插入:如何不插入重复数据?

    知识这个东西,看来真的要温故而知新,一直不用,都要忘记了 业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入 那么问题来了,是不是每次插入之前都要查一遍...向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率 看来这个问题不止我一个人苦恼过。...user (name) SELECT 'telami' FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1) 这种方法其实就是使用了mysql...item.username}, #{item.mobileNumber} ) ON duplicate KEY UPDATE id = id 这里用的是Mybatis,批量插入的一个操作...这样在批量插入时,如果存在手机号相同的话,是不会再插入了的。 来源:www.telami.cn

    5.4K20

    【MySQL】插入优化篇——(少量插入数据优化&批量插入数据load指令)

    前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎!...本章主要内容面向接触过C++ Linux的老铁 主要内容含: 1.批量插入 采取以下形式,在一个insert语句中完成数据插入,而不是分成几个insert语句 Insert into tb test...values(1,'Tom'),(2,'cat'),(3, jerry'); 【1】需要大批量插入数据——load指令 如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用MVSQL...本地磁盘文件中的数据,通过load直接加载到数据库表结构中 操作如下: #客户端连接服务端时,加上参数--local-infile mysql --local-infile -u root -p #设置全局参数...批量处理:对于大量的插入操作,将它们封装在一个事务中可以显著提高性能,因为数据库只需在事务结束时进行一次磁盘写入操作,而不是每次插入都写入。

    2.1K10

    MySQL批量插入数据的四种方案(性能测试对比)

    来源:blog.csdn.net/a18505947362/article/details/123667215 本文记录个人使用MySQL插入大数据总结较实用的方案,通过对常用插入大数据的4种方式进行测试...一、前言 最近趁空闲之余,在对MySQL数据库进行插入数据测试,对于如何快速插入数据的操作无从下手,在仅1W数据量的情况下,竟花费接近47s,实在不忍直视!在不断摸索之后,整理出一些较实用的方案。...IService接口用于进行批量插入数据操作saveBatch()方法 1、Maven项目中pom.xml文件引入的相关依赖如下       <!...student表结构(注意:无索引) 三、测试工作 简明:完成准备工作后,即对for循环、拼接SQL语句、批量插入saveBatch()、循环插入+开启批处理模式,该4种插入数据的方式进行测试性能。...JDBC驱动默认情况下忽略saveBatch()方法中的executeBatch()语句,将需要批量处理的一组SQL语句进行拆散,执行时一条一条给MySQL数据库,造成实际上是分片插入,即与单条插入方式相比

    16.4K21

    Mysql批量插入时,如何不插入重复的数据

    业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入 那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?...向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率 看来这个问题不止我一个人苦恼过。...user (name) SELECT 'telami' FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1) 这种方法其实就是使用了mysql...item.mobileNumber} ) ON duplicate KEY UPDATE id = id 这里用的是Mybatis,批量插入的一个操作...这样在批量插入时,如果存在手机号相同的话,是不会再插入了的。

    6.7K21

    MySql批量插入时,如何不插入重复的数据

    业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入 那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?...向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率 看来这个问题不止我一个人苦恼过。...几百万的数据,不可能查出来,做去重处理 说一下我Google到的解决方案 1、insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。...item.mobileNumber} ) ON duplicate KEY UPDATE id = id 这里用的是Mybatis,批量插入的一个操作...这样在批量插入时,如果存在手机号相同的话,是不会再插入了的。

    4.2K20

    MySql 批量插入时,如何不插入重复的数据

    :需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入 那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?...向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率 看来这个问题不止我一个人苦恼过。...几百万的数据,不可能查出来,做去重处理 说一下我Google到的解决方案 1、insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。...item.mobileNumber} ) ON duplicate KEY UPDATE id = id 这里用的是Mybatis,批量插入的一个操作...这样在批量插入时,如果存在手机号相同的话,是不会再插入了的。

    4.6K20

    MySQL批量插入数据,一次插入多少行数据效率最高?

    一、前言 我们在操作大型数据表或者日志文件的时候经常会需要写入数据到数据库,那么最合适的方案就是数据库的批量插入。只是我们在执行批量操作的时候,一次插入多少数据才合适呢?...假如需要插入的数据有百万条,那么一次批量插入多少条的时候,效率会高一些呢?这里博主和大家一起探讨下这个问题,应用环境为批量插入数据到临时表。...一次到底插入多少才合适呢? 三、批量插入数据测试 开始测试,但是一开始插入多少是合适的呢,是否有上限?查询mysql手册,我们知道sql语句是有大小限制的。...耗时:1.432s 42W的数据,每次插入30W条。耗时:1.362s 42W的数据,每次插入40W条。耗时:1.764s 随着插入量的增加,批量插入条数多了之后,性能是有所提升的。...这部分我的理解是mysql是要分配一定的内存给传过来的数据包使用,当批量插入的数据量到达一定程度之后,一次插入操作的开销就很耗费内存了。

    10.7K30

    面试官:MySQL 批量插入,如何不插入重复数据?

    业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入。 那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?...向大数据数据库中插入值时,还要判断插入是否重复,然后插入。 如何提高效率? 看来这个问题不止我一个人苦恼过。...user (name) SELECT 'telami' FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1) 这种方法其实就是使用了MySQL...item.mobileNumber} ) ON duplicate KEY UPDATE id = id 这里用的是Mybatis,批量插入的一个操作...这样在批量插入时,如果存在手机号相同的话,是不会再插入了的。 —END—

    2K20

    MySQL批量插入测试数据的几种方式

    前言 在开发过程中我们不管是用来测试性能还是在生产环境中页面展示好看一点, 又或者学习验证某一知识点经常需要一些测试数据, 这个时候如果手敲的话, 十行二十行还好, 多了就很死亡了, 接下来介绍两种常用的...MySQL测试数据批量生成方式 存储方式+函数 Navicat的数据生成 一、表 准备了两张表 角色表: id: 自增长 role_name: 随机字符串, 不允许重复 orders: 1-1000..., 通过函数保证数据不重复 设置允许创建函数 查看 MySQL是否允许创建函数 SHOW VARIABLES LIKE 'log_bin_trust_function_creators'; 结果如图所示...-- 插入角色数据 DELIMITER $$ CREATE PROCEDURE insert_role(max_num INT) BEGIN DECLARE i INT DEFAULT 0;...-- 插入用户数据 DELIMITER $$ CREATE PROCEDURE insert_user(START INT, max_num INT) BEGIN DECLARE i INT

    1.1K10

    使用shell脚本批量插入数据到MySQL中

    经常会踫到这样的场景需求:批量向MySQL数据库插入数据,显然手工INSERT成千上万条数据是不现实的,所以自己写了这个shell脚本来处理。...1 具体需求 shell脚本批量插入10万条数据到MySQL中,其中对应表唯一索引是用户uid。因此在程序循环1万次数时,每次都使uid自增1就行了。...2 脚本代码 鉴于数据量比较大,我们的shell脚本需要考虑MySQL执行INSERT的效率,所以采用了对次数取模拼接多个VALUES的值来实现。.../bin/bash # FileName: batchinsertmysqlshell1.sh # Description: 使用shell脚本批量插入数据到MySQL中 # Simple.../batchinsertmysqlshell1.sh # mysql db name. db_name="gamedata" # mysql table name. table_name="test_user_skin

    2.8K10
    领券