道者编程

MYSQL添加千万条测试数据

我们在学习MYSQL的过程中,可能会添加大量的数据以供测试,实际不是每个项目都能遇到这么大的数据量,但我们自己可以模拟数据,以供平时学习。


首先我们把数据库添加一些数据,这里我先添加一百万条记录,不过我这里只有三个字段,数据量不算大。我用PDO的方式添加。千万不要一条一条插入数据库,这样性能最低,慢死,要把数据量批量入库:准备好sql,一次性搞进去。


<?php

header("Content-Type: text/html;charset=utf-8");
set_time_limit(0);
$t=time();
try{ 
    $pdo=new pdo("mysql:host=127.0.0.1;dbname=f","root","123",array(PDO::ATTR_AUTOCOMMIT=>1)); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //开启异常处理
   $pdo->exec('set names utf8');  
}catch(PDOException $e){ 
     dir('数据库连接失败,错误信息:'. $e->getMessage());  
} 

  $sql = "insert into new (title, counts,times) values";
  for($i=1; $i<=1000000; $i++){
      $time = time();
      $counts = '李连杰'.$i;
      $sql .="('李小龙','".$counts."',$time),"; //sql语句;
    }
    $sql = substr($sql,0,strlen($sql)-1);
    $pdo->exec($sql);
echo"写入成功,耗时:",time()-$t;

我这里测试27秒全部写入Innodb表,如果字段多,数据量大,建议先把索引删除。


注意:mysql在执行单条大量数据的插入操作可能会报1153错误,原因是MYSQL收到的信息包超过了单条设定值,我们可以修改一下。首先进入MYSQL控制台运行命令查看:

mysql> show variables like 'max_allowed_packet';

默认为:1048576=1024K=1M


我们改成100M,运行:

mysql> set global max_allowed_packet = 10*1024*1024
修改之后先退出mysql控制台,再进入查看。


这里就是100M了。


注意:

1:max_allowed_packet设置值必须为1024的倍数,最大为1G

2:设置后先退出控制台,重新进入才能看见修改值

3:命令行中修改后,重启MYSQL失效,要永久生效,必须修改mysql.cnf,然后重启数据库。


最新评论:
1楼 广东省深圳市 电信ADSL 发表于 2018-05-17 10:44:07
66666
共有 1 条记录  首页 上一页 下一页 尾页 1
我要评论:

看不清楚