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,然后重启数据库。