mysql如何一秒插入10万条数据

2023-11-18

当我们需要批量插入或者更新记录时,可以采用Java的批量更新机制,该机制允许多条语句甚至一次性提交给数据库处理。通常情况下比一句一提交处理更有效率。

jdbc处理批量提交有三个方法。(需要注意的是,这三种方法都要和PreparedStatement一起使用)

方法名 描述
addBatch(String) 添加批量处理的SQL语句
executeBatch() 执行批量处理语句
clearBatch() 清理缓存

为什么我们需要批量处理sql语句,如果我们提交100万条数据,并且是一条一条提交,这样就会造成大量的磁盘io,数据库性能因此下降,但是如果我们把执行的sql存起来,比如10万条数据提交一次,那么只需要提交10次,大大减少了磁盘io,同时提高了数据库性能。

创建数据库

CREATE TABLE name(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
grade int(20)
);

插入100万条数据

  @Test
    public void insertTest04() throws SQLException, IOException, ClassNotFoundException {
        long start = System.currentTimeMillis();

        Connection conn = JDBCUtils.getConnection();

        //1.设置为不自动提交数据
        conn.setAutoCommit(false);

        String sql = "insert into name(name,grade)values(?,?)";
        PreparedStatement ps = conn.prepareStatement(sql);

        Random rand = new Random();
        for (int i = 1; i <= 1000000; i++) {
            ps.setString(1, "name_" + i);
            ps.setInt(2,rand.nextInt(100)+i);
            //1.存sql
            ps.addBatch();

            if (i % 1000 == 0) {
                //2.执行sql
                ps.executeBatch();
                //3.清空缓存
                ps.clearBatch();
            }
        }
        //2.提交数据currentTimeMillis()
        conn.commit();
        long end = System.currentTimeMillis();
        System.out.println("花费的时间为:" + (end - start)/1000+"秒");
        JDBCUtils.closeResouce(conn, ps);
    }

数据库默认数据自动提交,所以在这里,我们需要使用setAutoCommit(false)设置不自动提交数据,这样我们把sql分割成1000条执行一次。注意(设置了不自动提交之后我们需要手动提交)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql如何一秒插入10万条数据 的相关文章

  • 如何搜索例程的内容/(SP-触发函数)

    我需要在数据库内所有例程的例程主体 存储过程 函数 触发器 中搜索文本 我该怎么做 Thanks SELECT OBJECT NAME object id FROM sys sql modules WHERE definition LIKE
  • JDBC插入实数数组

    我试图将一个真实的数组插入到 postgresql 数组中 该表的定义是 String sqlTable CREATE TABLE IF NOT EXISTS ccmBlock sampleId INTEGER block REAL 插入内
  • 如何从批量数据中的mysql列中删除所有非数字字符

    我想从列中删除所有非数字字符 我的数据库中有大量数据 目前我正在使用以下链接中描述的方法 http venerableagents wordpress com 2011 01 29 mysql numeric functions http
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • 如何在 SEQUELIZE (nodeJS) 中创建触发器?

    我正在尝试使用sequelize 创建一个触发器 主要思想是创建一个实例CONFIG创建后USER USER MODEL module exports function sequelize DataTypes var User sequel
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • 在 SQL 中,如何从 SELECT * FROM ... 中排除结果?

    我知道我的标题不太具有描述性 让我在这里详细解释一下 假设一个表有 26 个字段 例如字段 a 字段 z 我只想要一个选择查询只返回 15 个字段 所以 通常 我会执行 SELECT field a field b field o FROM
  • 使用子查询 select 创建新表

    我试图从子查询选择创建一个新表 但出现以下错误 附近的语法不正确 SELECT INTO foo FROM SELECT DATEPART MONTH a InvoiceDate as CalMonth DATEPART YEAR a In
  • 如何从 SQL Server 2008 查询结果中删除“NULL”

    我有一个包含 59 列和超过 17K 行的表 很多行都有NULL在某些列中 我想删除NULL以便查询返回空白 而不是NULL 我可以运行一些更新功能来替换所有NULL with 使用 SQL Server 2008R2 Management
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • SQL 约束以防止根据列的先前值更新列

    是否可以使用检查约束 或其他一些技术 来防止在更新记录时设置与其先前值相矛盾的值 一个例子是 NULL 时间戳 表明发生了某些事情 例如 file exported 一旦文件被导出并且具有非 NULL 值 就不应再将其设置为 NULL 另一
  • 如何使用 SQL Server 2008 将行复制到同一个表中

    A 到目前为止我的方式 sqlCommand CommandText INSERT Table1 column1 column2 column3 SELECT column1 column2 column3 FROM Table1 WHER
  • Spark SQL 中的 SQL LIKE

    我正在尝试使用 LIKE 条件在 Spark SQL 中实现联接 我正在执行连接的行看起来像这样 称为 修订 Table A 8NXDPVAE Table B 4 8 NXD V 在 SQL Server 上执行联接 A revision
  • 如何在 SQL Server 中连接

    我的数据库没有特定的列 因此我通过开关在查询中创建了一个列 我需要的是将此列与数据库中的另一列连接起来 select certificateDuration DurationType case when certificateDuratio
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST

随机推荐

  • Bootstrap入门(一)

    前言 大家好 我是九歌 今天我要分享的内容是Bootstrap的入门 首先老规矩先上思维导图 提示 以下是本篇文章正文内容 下面案例可供参考 一 Bootstrap 学习一门新的技术我们终究都逃不过三个W What Why Where 1
  • Vue3.0

    teleport Teleport 提供了一种干净的方法 允许我们控制在 DOM 中哪个父节点下呈现 HTML 而不必求助于全局状态或将其拆分为两个组件
  • 《C++ Primer》学习笔记(十五):面向对象编程

    C Primer 学习笔记 十五 面向对象编程 抽象基类 访问控制与继承 构造函数与拷贝控制 文本查询程序再探 练习 面向对象编程的核心思想是数据抽象 继承和动态绑定 在C 语言中 当我们使用基类的引用 或指针 调用一个虚函数时将发生动态绑
  • python跟易语言的爬虫_用易语言写个简单的小爬虫其中的关键点

    一 请求头 ctrl L快捷键创建变量 变量名 类型 协议参数 类 POST数据类 请求头数据 文本型 协议参数 添加 v 4 52 0 请求头数据 协议参数 获取协议头数据 二 请求参数比如post 变量名 类型 请求data参数 类 P
  • 【负荷预测】基于神经网络的负荷预测和价格预测(Matlab代码实现)

    目录 1 概述 2 基于神经网络的负荷预测 Matlab实现 2 1 代码 2 2 结果 2 3 回归树模型的进一步改进 3 基于神经网络的价格预测 Matlab代码实现 4 阅读全文 Matlab代码 1 概述 这个例子演示了用MATLA
  • 《软件调试的艺术》学习笔记——GDB使用技巧摘要(3)——程序崩溃处理

    程序为什么会崩溃 内存中的程序布局 当某个错误导致程序突然和异常地停止执行时 程序崩溃 迄今为止最为常见的导致程序崩溃的原因是试图在未经允许的情况下访问一个内存位置 硬件会感知这件事 并执行对操作系统的跳转 Unix系列的平台上 操作系统一
  • VS2015下用Qt Designer创建对话框

    目录 1 Qt Designer新建文件 选择适合的模板 布局窗口 2 在右侧属性窗口修改名称为需要的名称 3 文件另存为对象名称一样的xxx ui文件 4 创建xxx cpp和xxx h文件 加入工程 也可以在qt creator中创建
  • sql-labs闯关38~45

    sql labs闯关38 45 友善爱国平等诚信民主友善爱国爱国友善平等诚信自由平等友善平等法治诚信民主民主 复习笔记1 内容 sql labs第38关 GET请求 堆叠查询注入 字符型 sql labs第39关 GET请求 堆叠查询注入
  • 30分钟从零开始搭建并部署个人知识库(超详细)

    前言 网上关于动态文档生成工具有很多如 Docsify VuePress Docute Hexo这些都是一些非常优秀的文档生成工具 本章主要介绍如何快速使用Docsify搭建一个快捷 轻量级的个人 团队文档 并且通过Github Pages
  • dracut 基本介绍

    dracut 基本介绍 dracut 维基 https dracut wiki kernel org index php Main Page http www 360doc com content 13 0428 09 12139495 2
  • 计算机网络系列五 -- 运输层详解

    1 运输层 1 1 运输层的定义 运输层是 OSI 七层参考模型的第四层 主要功能为应用层提供通信服务 它即是面向通信的最高层 也是用户功能的最底层 在计算机网络中 真正进行数据通信的是两个主机的进程 由于一个主机中有多个进程同时在通信 而
  • vc++画线段的函数_word2vec的损失函数

    虽然word2vec常被当作无监督 但是其训练过程跟有监督基本差不多 原始的word2vec暂时不考虑负采样和huffman tree 其损失函数就是多元交叉熵 多元交叉熵的公式 以传统机器学习来说 这里的Zj就是某个类别的预测概率 yj
  • 物联网嵌入式学习路线发展方向(表格一目了然)

    文章目录 一 学习路线 二 各种分类 1 软件硬件分类 2 发展方向 技术类型 对应岗位分类 2 1 芯片方向 2 2 Linux方向 3 常见板子芯片内核 4 嵌入式公司 对于小白 不知道嵌入式整个体系 学什么 顺序是什么 可以找什么工作
  • Review-MyBatis

    MyBatis 1 学习方法 MyBatis框架功能与Hibernate一样 都是持久化框架 都是操作JDBC 做ORM框架 1 MyBatis框架比Hibernate小 2 做的是针对SQL语句查询结果进行封装 2 MyBatis框架是什
  • 服务器磁盘性能多少分正常,服务器内存使用率多少为正常

    服务器内存使用率多少为正常 内容精选 换一换 当您发现云服务器的运行速度变慢或云服务器突然出现网络断开现象 则可能是云服务器的带宽和CPU使用率过高导致 如果您已经通过云监控服务创建过告警任务 当CPU或带宽利用率高时 系统会自动发送告警给
  • 微弱直流电压/电流信号的采样电路 --滤波跟随放大

    要求将待测的电压 1mV 1000mV 电流 1mA 100mA 采样出来传给单片机 我的思路是 电压采样先用放大电路放大 再进行滤波 把50Hz的交流电干扰滤除 然后再进行模数转换传给单片机 电流的话用一个采样电阻 然后对其电压采样后推算
  • 信息学奥赛一本通【1034:计算三角形面积】

    题目描述 平面上有一个三角形 它的三个顶点坐标分别为 x1 y1 x2 y2 x3 y3 x1 y1 x2 y2 x3 y3 那么请问这个三角形的面积是多少 精确到小数点后两位 输入 输入仅一行 包括66个单精度浮点数 分别对应x1 y1
  • 关于git的一些命令,实验记录

    1 下载moduleA项目代码 命令 git clone https github com wangyanan52121 moduleA git 因网络问题 可能会下载失败 多试几次 2 查看当前项目 查看tag命令 字符串排序 git C
  • 语言深入理解指针(非常详细)(三)

    目录 数组名的理解 使用指针访问数组 一维数组传参的本质 二级指针 指针数组 指针数组模拟二维数组 数组名的理解 在上 个章节我们在使用指针访问数组的内容时 有这样的代码 int arr 10 1 2 3 4 5 6 7 8 9 10 in
  • mysql如何一秒插入10万条数据

    当我们需要批量插入或者更新记录时 可以采用Java的批量更新机制 该机制允许多条语句甚至一次性提交给数据库处理 通常情况下比一句一提交处理更有效率 jdbc处理批量提交有三个方法 需要注意的是 这三种方法都要和PreparedStateme