精华内容
下载资源
问答
  • mysql插入大量数据总结.pdf
  • MySQL 插入大量数据报错 解决办法

    千次阅读 2014-03-08 14:07:33
    MySQL插入大量数据报错,解决办法   首先找到my.ini文件, 地址:C:\ProgramFiles\MySQL\MySQL Server 6.0\my.ini 打开my.ini文件后: 一、找到连接数修改成32000:max_connections=32000   二、在最后添加一行...

    MySQL插入大量数据报错,解决办法

     

    首先找到my.ini文件,  地址:C:\ProgramFiles\MySQL\MySQL Server 6.0\my.ini


    打开my.ini文件后:

    一、找到连接数修改成32000:max_connections=32000

     

    二、在最后添加一行max_allowed_packet=64M

    如果修改不了就先给权限。

     

    三、打开注册表

    开始--运行中输入regedit

     

    地址:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\parameters

     

    在这里新建两个参数

        TcpTimedWaitDelay  类型是  DWORD  值十六进制   30-60之间   我设置的是60

       MaxUserPort   类型是   DWORD 值十进制    32768

     

    如:


    展开全文
  • 景: 项目需要导入案件2200条...最后确定了使用mysql批量插入的方法去进行插入操作 慢的原因及解决思路: 这里慢的原因是针对本项目: 插入方式为程序遍历循环逐条插入。在mysql上检测插入一条的速度在0.02s到0.04...

    景:
    项目需要导入案件2200条。其中导入的excel每个行案件的信息上包含大约15个联系方式。那么总的联系方式一共用30000条左右

    这里优化之前的速度是16-20分钟之间。太慢了。找了好久优化的方法。最后确定了使用mysql批量插入的方法去进行插入操作

    慢的原因及解决思路:
    这里慢的原因是针对本项目:

    插入方式为程序遍历循环逐条插入。在mysql上检测插入一条的速度在0.02s到0.04s之间。

    所以逐条插入的速度是0.03*30000条的速度是15分钟左右。

    所以逐条插入是没法优化的。然后去查询优化方式。发现用批量插入的方法可以提高很大速度。

    将30000条数据的插入速度提升到1-2分钟左右

    这里放一个测试demo例子:
    用junit测试循环插入1000条数据的时间与用批量插入插入10000条使用的时间
    1普通循环插入1000条数据的时间测试
        @Test
        public void insertCuiji() {
             
                 List<Cuiji> list= new ArrayList<Cuiji>();
                 
                 Cuiji cuiji = new Cuiji();
                 cuiji.setBankcode("jylh");
                 cuiji.setCompanycode("qixin");
                 
                 for (int i = 0; i < 1000; i++) {
                      
                     cuijiMapper.insertSelectiveO(cuiji, "jylh");
                }
                 
                 
                
                
        }


    执行速度是38s也就是0.038*1000的速度。比较慢了


    2用批量插入插入10000条使用的时间
        @Test
        public void insertCuiji() {
             
                 List<Cuiji> list= new ArrayList<Cuiji>();
                 for (int i = 0; i < 1000; i++) {
                     Cuiji cuiji = new Cuiji();
                     cuiji.setBankcode("jylh");
                     cuiji.setCompanycode("qixin");
                     list.add(cuiji);
                     
                }
                cuijiMapper.insertListCuiji(list);
        }


    批量插入使用了0.0356s 这相当于插入一条数据的速度,所以用批量插入会大大提升数据插入速度,当有较大数据插入操作是用批量插入优化

    批量插入的写法:
    dao定义层方法

    Integer insertListCuiji(List<Cuiji> cuiji);

    mybatis 的sql写法
    <insert id="insertListCuiji" parameterType="java.util.List">
          INSERT INTO `case`.`t_cuiji`
                ( `doccode`,
                  `companycode`,
                  `bankcode`,
                  `notes`,
                  `type`) 
             values
            <foreach collection="list" item="item" separator="," index="index">
                (#{item.doccode},
                #{item.companycode},
                #{item.bankcode},
                #{item.notes},
                #{item.type})
            </foreach>
     
        </insert>

    这样就能进行批量插入操作:
    注:当批量操作数据量大的时候。例如我插入3w条数据要操作的数据包超过了1M会报 Mysql You can change this value on the server by setting the max_allowed_packet' variable. 异常 此时修改mysql的max_allowed_packet大小即可,详细解决方法请看:

    http://blog.csdn.net/alice_qixin/article/details/78522600

    或者将list分成几份去插入。

    展开全文
  • MySQL插入大量数据调优

    千次阅读 2012-07-09 16:04:43
    > 使用存储过程:(一百万条数据分25万次循环,每次循环插入4条数据)  如果同时从同一个客户端插入很多行,使用含多个VALUE的INSERT语句同时插入几行。这比使用单行INSERT语句快(在某些情况下快几倍)。 DELIMITER...

    1. SQL语句级别调优:

    > 使用存储过程:(一百万条数据分25万次循环,每次循环插入4条数据)

     如果同时从同一个客户端插入很多行,使用含多个VALUE的INSERT语句同时插入几行。这比使用单行INSERT语句快(在某些情况下快几倍)。

    DELIMITER $$

    CREATE  PROCEDURE Pro_InsertMillionRecords()

    BEGIN

       DECLARE _End int default 0;

       WHILE(_End < 250000)

       DO

           INSERT customer(cname) SELECT name FROM names ORDER BY RAND() LIMIT 1;

           INSERT customer(cname) SELECT name FROM names ORDER BY RAND() LIMIT 1;

           INSERT customer(cname) SELECT name FROM names ORDER BY RAND() LIMIT 1;

           INSERT customer(cname) SELECT name FROM names ORDER BY RAND() LIMIT 1;

           SET _End = _End +1;

       END WHILE;

    END $$

    DELIMITER ;

     

    > MySQL只有InnoDB存储引擎支持事务,事务默认为自动提交模式,即没插入一条数据就提交一次。这样显然效率低下。可以在插入数据前关闭自动提交模式。完成插入后再开启自动提交模式。

    SET AUTOCOMMIT=0;

    ----

    COMMIT:

    SET AUTOCOMMIT=1;


    > 锁定表:LOCK TABLE t1 locktype, t2 locktype

    如果locktype为READ,即表示锁定该表,该表不能被写,只提供读,除非获取了该表的读锁。

    如果locktype为WRITE,即表示锁定该表,该表不能被读,只能写,除非获取了该表的写锁。

    LOCK TABLE customer WRITE, names READ;

    插入数据完成后,再解除表锁定:

    UNLOCK TABLES;

     

    通过以上的措施,我在往表中插入一百万条数据,由原来的平均2分9秒变为现在的1分36秒,足足提速33秒。

    另外其实那条插入数据的SQL语句

    INSERT customer(cname) SELECT name FROM names ORDER BY RAND() LIMIT 1;

    也是性能瓶颈所在,如果我把它换成单纯的插入数据:

    INSERT INTO customer (cname) VALUES ('John');

    则不需要经过上面的3个调优措施也只花了49秒插入一百万条数据。

    只不过我不知道如何替换这条语句,只好作罢。

     

    > 为某些字段建立索引,我尝试的例子用不上这个.MySQL默认为主键创建索引。

     

    2. 调节服务器参数:http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#server-parameters

       通过下面的语句看到运行服务器的统计和状态指标:

    mysql>SHOW STATUS;  MySQL使用完全可以升级的算法,因此通常运行时可以用很少的内存。然而,通常情况若给MySQL更多的内存性能会更好。

    当调节MySQL服务器时,要配置的两个最重要的变量是key_buffer_size和table_cache。在试图更改其它变量前你应先确信已经适当地配置了这些变量。

     

        下面内容参考自:http://www.douban.com/group/topic/6097647/

        批量插入暂存使用内存(bulk_insert_buffer_size):当我们使用如 insert … values(…),(…),(…)… 的方式进行批量插入的时候,MySQL 会先将提交的数据放如一个缓存空间中,当该缓存空间被写满或者提交完所有数据之后,MySQL 才会一次性将该缓存空间中的数据写入数据库并清空缓存。

        临时表使用内存(tmp_table_size):当我们进行一些特殊操作如需要使用临时表才能完成的 Order By,Group By 等等,MySQL 可能需要使用到临时表。当我们的临时表较小(小于 tmp_table_size 参数所设置的大小)的时候,MySQL 会将临时表创建成内存临时表,只有当 tmp_table_size 所设置的大小无法装下整个临时表的时候,MySQL 才会将该表创建成 MyISAM 存储引擎的表存放在磁盘上。

    展开全文
  • mysql插入大量数据,时间的优化。

    千次阅读 2018-03-09 16:01:40
    背景: 业务场景假设,公司原有...此时需要用到mysql的insert操作来插入用户的海量数据。 普通情况下,会使用for循环一条一条的插入数据。 假设客户的数据量为10万条数据。 <?php $connect=@mysql_connect(...

    背景:

        业务场景假设,公司原有excel记录了千万级客户的相关数据,公司业务结构实现了信息化的布局,需要在新开发的CRM系统中导入千万级的客户数据。此时需要用到mysql的insert操作来插入用户的海量数据。

         普通情况下,会使用for循环一条一条的插入数据。

         假设客户的数据量为10万条数据。

    <?php
    $connect=@mysql_connect("localhost","root","") or die(mysql_error());
    @mysql_select_db("test") or die(mysql_error());
    @mysql_query("set names utf-8");
    $start_time=microtime(true);
    /*
     * 方法一,循环插入mysql数据
     */
    $sql="insert into test_table(value) values('1')";
    for($i=0;$i<100000;$i++)
    {
        @mysql_query($sql) or die(mysql_error());
    }
    
    $end_time=microtime(true);
    
    echo "程序的运行时间为:".($end_time-$start_time);

      

       由上图可见,程序运行速度非常慢,严重影响用户体验。

       

       优化,对客户的插入数据进行优化。

       速度优化的核心法则,使用"insert into table value(value1,value2.......)";

       既使用一条sql语句,对数据进行插入处理。

     

    $connect=@mysql_connect("localhost","root","") or die(mysql_error());
    @mysql_select_db("test") or die(mysql_error());
    @mysql_query("set names utf-8");
    $start_time=microtime(true);
    
    
     /*
     * 方法二,拼接插入mysql数据
     */
    
    $sql="insert into test_table(value) values";
    for($i=0;$i<100000;$i++)
    {
    $sql.="('1'),";
    }
    $sql=substr($sql,0,strlen($sql)-1);
    @mysql_query($sql) or die(mysql_error());
    $end_time=microtime(true);
    echo "程序的运行时间为:".($end_time-$start_time);

     由上图可见,同样的10万级的数据插入,速度已经从15s优化到了0.5s。  

    展开全文
  • at com.mysql.jdbc.ConnectionImpl.clientPrepareStatement(ConnectionImpl.java:1395) at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4178) at ...
  • mysql 插入大量数据 千万级别

    千次阅读 2011-12-14 15:13:47
    php:用于生成sql文件,其实就是字段值,用\t分割,每一行用\r\n分割 header ( "Content-Type: text/html; charset=utf-8" ); set_time_limit(1000); ...$myFile="l:/insertcardtotalinfo3.sql";...//ab追加 wb重
  • JDBCMySql jdbc = new JDBCMySql(); Connection conn = jdbc.operateMySqlLocal(url, username, password); conn.setAutoCommit(false); PreparedStatement pstm = null; try { pstm = conn.prepare...
  • mysql批量插入大量数据 时间:2020年11月25日 今天遇到了一个批量插入大量数据任务,然后出于小白本能,直接for-each循环插入不就好了,于是手上开始噼里啪啦一顿操作,写好了从读取excel到插入数据库的工作,于是就...
  • mysql循环插入大量测试数据

    千次阅读 2019-02-26 11:56:30
    最近业务场景的需要,mysql单表要插入大量数据,考虑到单条记录长短对数据存储量有很大的影响,所以进行了一次插入检索测试。 插入代码Procedure delimiter $$ DROP PROCEDURE IF EXISTS insert_current_data_uuid ...
  • MySQL批量插入大量数据方法

    万次阅读 多人点赞 2018-05-31 16:47:06
    MySQL数据库中,如果要插入上百万级的记录,用普通的insert into来操作非常不现实,速度慢人力成本高,推荐使用Load Data或存储过程来导入数据,我总结了一些方法分享如下,主要基于MyISAM和InnoDB引擎。...
  • 如何向mysql插入大量数据

    千次阅读 2014-08-12 22:42:38
    有时为了做性能测试,需要向mysql插入大量的测试用数据,以下介绍
  • 该资源主要实现如下功能,利用poi获取excel中大量数据,然后利用jdbc批量插入mysql
  • 主要介绍了C++操作MySQL大量数据插入效率低下的解决方法,需要的朋友可以参考下
  • 昨晚使用数据库的时候需要向库中插入大量测试数据,数据库使用的Mysql库,使用Dapper框架操作的数据库,插入数据时不管开不开启事务,10W条数据耗时均为17s左右,这个速度好像有点慢啊,考虑到自己是第一次使用...
  • 由于经常需要使用java往mysql中导入大量数据,一条一条的插入速度太慢,使用String追加前期速度比较快,随着数据量的增加,插入速度越来越慢。 经过多次试验,我发现针对我的问题,将String追加改为StringBuild追加...
  • 一、前言应本次数据库压力测试的要求,测试数据记录至少为千万级,所以,问题来了,如何快速插入大量数据.二、解决方法一第一种解决方法是在MySQL终端中实现的,具体方法如下. a.打开MySQl数据库;mysql -u root -pb...
  • 创建数据库 create database ceshi; use ceshi; 创建表 create table ce( id int not null auto_increment, ...想问一下是什么原因造成的,还想知道插入多少条数据提交一次才是最优插入,第二种方法的注释?
  • 嵌套查询插入:快速插入行,测试的时候用的!呈2^n增长:mysql> insert into ss(name ,nianji,score) select name,nianji,score from ss;一会功夫就能把数据弄到上百万条。
  • 不管是日常业务数据处理中,还是数据库的导入导出,都可能遇到需要处理大量数据插入插入的方式和数据库引擎都会对插入速度造成影响,这篇文章旨在从理论和实践上对各种方法进行分析和比较,方便以后应用中插入...
  • mysql插入数据的时候丢失数据

    千次阅读 2019-09-08 10:36:42
    mysql插入数据的时候丢失数据 直接po截图和代码 什么时候会丢失数据? character_set_connection和服务器的字符集比character_set_client小时 如下 什么时候才不会丢失数据? 如下才不会丢失数据 要...
  • 经过数月的历练与开发,终于在这个月手上负责的一个项目即将交付了,看着这一两个月让我偶感压力的繁杂的事情一件件处理完毕,原本...在本周将一个需要处理上千万数据量的项目部署到UAT环境后,发现数据插入mysql...
  • 文章目录一、前言二、批量插入前准备1、插入数据表的字段2、计算一行字段占用的空间3、在数据里做插入操作的时候,整体时间的分配三、批量插入数据测试1、SQL语句的大小限制2、查看服务器上的参数:3、计算一次能...
  • 1.对于mysql数据库,driverurl中加入:allowMultiQueries=true&amp;rewriteBatchedStatements=true; 这样在使用jdbctemplate插入的时候,类似: private void insertData(JdbcTemplate insertJdbcTemplate, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,349
精华内容 39,339
关键字:

mysql插入大量数据

mysql 订阅