• 自动秒收录
  • 软件:1973
  • 资讯:57811|
  • 收录网站:279851|

IT精英团

你用了多长时间把100w的数据插入MySQL数据库?

你用了多长时间把100w的数据插入MySQL数据库?

浏览次数:
评论次数:
编辑: 景同
信息来源: ITPUB
更新日期: 2021-06-04 16:30:29
摘要

多线程插入(单表)问:为何对同一个表的插入多线程会比单线程快?同一时间对一个表的写操作不应该是独占的吗?答:在数据里做插入操" />

  • 正文开始
  • 相关阅读
  • 推荐作品

来源| http://juejin.im/post/5d255ab9e51d454f73356dcd

多线程插入(单表)

问:为什么在同一个表中插入多个线程比单线程快?同时给一张桌子写信不应该是独占的吗?答:插入数据时,整体时间分配如下:链接耗时(30%)

向服务器发送查询(20%)

解析查询(20%)

插入操作(10% *条目数)

插入索引(10% *索引索引)

关闭链接(10%)

由此可见,真正需要时间的不是操作,而是链接解析的过程。MySQL插入的数据在写入阶段是独占的,但是插入一段数据还是需要解析、计算,最后写入。例如,为每条记录分配一个自增id,验证主键的唯一键属性,或其他逻辑处理,都需要计算。所以多线程可以提高效率。

多线程插入(多表)

使用多线程在表分区后插入。

预处理SQL

普通SQL,即使用语句接口执行SQL

预处理SQL,即使用PreparedStatement接口执行SQL

使用PreparedStatement接口允许数据库预编译SQL语句,以后只需要传入参数,避免了数据库每次编译SQL语句,性能更好。

string SQL=' insertintotestdb . tuser(名称,备注,createtime,updatetime)值(?)';

for(inti=;im;i ){

//从池中获取连接

connection conn=MyBroker . GetConnection();

preparedstatementsptmt=conn . PrepareStatement(SQL);

for(intk=;kn;k ){

pstmt.setString(1,RanDomToolkit . generate String(12));

pstmt.setString(2,RanDomToolkit . generate String(24));

pstmt.setDate(3,new date(system . CurrentMemillis()));

pstmt.setDate(4,new date(system . CurrentMemillis()));

//加入批处理

pstmt . AddBatch();

}

pstmt . execute batch();//执行批处理

pstmt . close();

my Broker . FreeConnection(conn);//连接属于池

}

多值插入SQL

普通插入SQL: SQL:INSERT INTO TBL_TEST (id)

VALUES(1)
  • 多值插入SQL:INSERT INTO TBL_TEST (id) VALUES (1), (2), (3)
  • 使用多值插入SQL,SQL语句的总长度减少,即减少了网络IO,同时也降低了连接次数,数据库一次SQL解析,能够插入多条数据。

    事务(N条提交一次)

    在一个事务中提交大量INSERT语句可以提高性能。1、将表的存储引擎修改为myisam 2、将 sql 拼接成字符串,每 1000 条左右提交事务。


    /// <summary>
            /// 执行多条SQL语句,实现数据库事务。
            /// </summary>mysql数据库
            /// <param name="SQLStringList">多条SQL语句</param>
            public void ExecuteSqlTran(List<string> SQLStringList)
            {
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    if (DBVariable.flag)
                    {
                        conn.Open();
                        MySqlCommand cmd = new MySqlCommand();
                        cmd.Connection = conn;
                        MySqlTransaction tx = conn.BeginTransaction();
                        cmd.Transaction = tx;
                        try
                        {
                            for (int n = ; n < SQLStringList.Count; n++)
                            {
                                string strsql = SQLStringList[n].ToString();
                                if (strsql.Trim().Length > 1)
                                {
                                    cmd.CommandText = strsql;
                                    cmd.ExecuteNonQuery();
                                }
                                //后来加上的
                                if (n >  && (n % 1000 ==  || n == SQLStringList.Count - 1))
                                {
                                    tx.Commit();
                                    tx = conn.BeginTransaction();
                                }
                            }
                            //tx.Commit();//原来一次性提交
                        }
                        catch (System.Data.SqlClient.SqlException E)
                        {
                            tx.Rollback();
                            throw new Exception(E.Message);
                        }
                    }
                }
            }

    10w条数据大概用时10s!<END>

                                 

    58同城Hadoop2.6升级3.2实践
    « 上一篇 2021-06-04
    Nginx通过启用ssl会话重用可以提高多少性能?
    下一篇 » 2021-06-04
    • 如何在Ubuntu中保留文件系统并备份当前开发板镜像
      0阅读 0条评论 个赞
      在Ubuntu保留文件系统或者说备份当前开发板镜像的需求在不断增加。比如Ubuntu文件系统需要安装库文件的话直接使用apt-get工具就可以下载,但由于需要下载的核心板较多,比较费时间,这时需要将安……
    • 国产核心板全志T507助力消防系统升级
      0阅读 0条评论 个赞
      9月16日下午,位于湖南长沙市区内的中国电信大楼发生火灾,建筑高度218米,现场浓烟滚滚,数十层楼体燃烧剧烈。消防救援人员赶到现场后很快将火势控制住,目前大楼火势已被扑灭,所幸未发现人员伤亡。湖南电信……
    • 教大家如何处理Spring Boot易流中的用户和群体!
      0阅读 0条评论 个赞
      1.准备工作2.用户操作2.1添加用户2.2修改用户2.3删除用户2.4查询用户3.组操作3.1添加组3.2修改组3.3删除组3.4查询组4.查看表详情虽然说我们在实际开发中,……
    • 从PG15开始WAL压缩优化
      0阅读 0条评论 个赞
      PG15传闻中的超级令人激动的功能大多数跳票了,年初我也写过一个关于PG15新功能跳票的文章。PG15BETA已经发出几个月了,似乎PG15里令人激动人心的功能不多,不过从长长的新功能列表里,……
    • 深入了解美团叶子发射器开源方案
      0阅读 0条评论 个赞
      大家好,我是树哥。之前我们有聊过「如何设计一个分布式ID发号器」,其中有讲过4种解决方案,分别是:UUID类雪花算法数据库自增主键Redis原子自增美团以第2、3种解决方案为基础,开发出……
    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表
    • 长文解读春季交易!隔离?传播性?网被消灭了!
      9阅读 0条评论 个赞
      1.什么是事务2.Spring中的事务2.1两种用法2.2三大基础设施3.编程式事务4.声明式事务4.1XML配置4.2Java配置4.3混合配置5.事务属性5.1隔离性5……
    • Java精进-手写持久层框架
      0阅读 0条评论 个赞
      前言本文适合有一定java基础的同学,通过自定义持久层框架,可以更加清楚常用的mybatis等开源框架的原理。JDBC操作回顾及问题分析学习java的同学一定避免不了接触过jdbc,让我们来回顾下初学……
    • SQL Server索引的功能
      0阅读 0条评论 个赞
      一、深入浅出理解索引结构实际上,您可以把索引理解为一种特殊的目录。微软的SQLSERVER提供了两种索引:聚集索引(clusteredindex,也称聚类索引、簇集索引)和非聚集索引(nonclu……
    • SQL SERVER存储过程学习笔记
      6阅读 0条评论 个赞
      将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。存储过程的优点1.存储……
    • SQL Server的常用分页SQL
      0阅读 0条评论 个赞
      今天无聊和朋友讨论分页,发现网上好多都是错的。网上经常查到的那个TopNotin或者Max大部分都不实用,很多都忽略了Order和性能问题。为此上网查了查,顺带把2000和2012版本的也补上……
    • MQ系列5:5的发送模式:RocketMQ消息
      0阅读 0条评论 个赞
      在之前的篇章中,我们学习了RocketMQ的原理,以及RocketMQ中命名服务ServiceName的运行流程,本篇从消息的生产、消费来理解一条消息的生命周期。1消息生产在RocketMQ中……
    • SQL Server表变量和临时表的区别
      0阅读 0条评论 个赞
      一、表变量表变量在SQLServer2000中首次被引入。表变量的具体定义包括列定义,列名,数据类型和约束。而在表变量中可以使用的约束包括主键约束,唯一约束,NULL约束和CHECK约束(外键……
    • SQL Server复制:事务发布
      0阅读 0条评论 个赞
      一、背景在复制的运用场景中,事务发布是使用最为广泛的,我遇到这样一个场景:在Task数据库中有Basic与Group两个表,需要提供这两个表的部分字段给其它程序读取放入缓存,程序需要比较及时的获取……
    • 新一代网络请求库:python-httpx库
      0阅读 0条评论 个赞
      目录httpx库一、概述1、简介2、命令行模式3、快速开始3.1get请求3.2post请求3.2.1表单3.2.2文件3.2.3JSON3.2.4二进制3.3响应处理3.4流……
    • SQL Server动态生成分区脚本
      0阅读 0条评论 个赞
      一、前言前段时间使用表分区比较多,虽然已经写了SQLServer合并(删除)分区解惑、SQLServer2005分区模板与实例,但是在实践中一直感觉修改SQL脚本的时间比较多,一直想抽个时间来把……
    • MySQL性能调优和优化技术
      0阅读 0条评论 个赞
      介绍MySQL是一种流行的开源数据库应用程序,它以一种有意义且易于访问的方式存储和构造数据。对于大型应用程序,庞大的数据量可能会导致性能问题。本指南提供了一些关于如何提高MySQL数据库性能的调……
    • 公司排班系统遇到瓶颈?我自己造一个!
      10阅读 0条评论 个赞
      本期名人堂我们有幸邀请到了白鲸开源的联合创始人代立冬先生。代立冬先生与我们分享了自己社区开源的经历,详细介绍了一个开源项目是如何加入Apache孵化器,如何在导师的辅导下慢慢孵化、成长的过程,以及自己……
    • 当我们在并行学习的时候 我们到底在学习什么?
      0阅读 0条评论 个赞
      大家好,我是鲏。前段时间,星球里一位朋友问我:鱼皮,高并发项目牵扯的知识有哪些?之前看到的一个回答:既要解决性能的问题又要考虑业务完整性,还有网络资源、服务器资源等,我不太能理解,希望鱼皮细说。我就简……
    • 教你如何构建JAVA分布式爬虫
      0阅读 0条评论 个赞
      在工作中,我们经常需要去获取一些数据,但是这些数据可能需要从第三方平台才可以获取到。这个时候,爬虫系统就可以帮助我们来完成这些事情。提到爬虫系统,很多人都会想到使用python。但实际上,语言只……
    • 中国台湾的建设:有效登陆中国台湾的六脉神剑
      0阅读 0条评论 个赞
      在数字化时代,数字化体系的建设需要的是系统化的规划和产品化的迭代的模式,基于企业核心业务能力体系,做中台化的持续建设与落地,则是一种不错的选择。所以,企业业务中台的建设和落地,是关系到企业数字化战略成……
    • 【云原生】-码头工人容器迁移神谕到关系型数据库
      0阅读 0条评论 个赞
      文章目录前言⛳️1.创建专用网络⛳️2.Oracle12C部署✨2.1镜像下载✨2.2容器创建✨2.3创建业务用户✨2.4监听启动⛳️3.MySQL8部署✨3.1容器……
    • 谈ASP.NET核心认证与授权
      0阅读 0条评论 个赞
      使用asp.netcore开发应用系统过程中,基本上都会涉及到用户身份的认证,及授权访问控制,因此了解认证和授权流程也相当重要,下面通过分析asp.netcore框架中的认证和授权的源码来分析……
    • 设计模式介绍——单一模式
      0阅读 0条评论 个赞
      简介一个类只允许创建一个对象(或实例),那么这个类就是一个单例类,这种设计模式称作单例设计模式(SingletonDesignPattern),简称单例模式。单例模式保证系统内存中只存在一个对象,……
    • 简单分析下的GOLDENDB
      0阅读 0条评论 个赞
      GOLDENDB是金融行业使用的比较广泛的一个数据库产品,以前也经常有朋友希望我写几篇分析GoldenDB数据库的文章。说实在的这类文章不好写,必须对某个产品有一定程度的了解,特别是真正上手用过之后,……
    • 【高并发】从源码角度深入分析线程池如何优雅退出
      0阅读 0条评论 个赞
      大家好,我是冰河~~在【高并发专题】中,我们从源码角度深度分析了线程池中那些重要的接口和抽象类、深度解析了线程池是如何创建的,ThreadPoolExecutor类有哪些属性和内部类,以及它们对线程池……
    最近发布资讯
    更多