写入速度MySQL每秒能插入50万条记录吗?带着疑惑,我们看看mysql每秒能插入多少条记录?回答这个问题首先,影响mysql插入速度的因素有哪些?硬盘的速度、网卡的速度、行中写入的数据量、数据在硬盘中的存储位置等因素。对于简单的数据,插入速度一定要快,对于复杂的插入,一定要慢。因此,很难单独回答这个问题。最好的方法是进行压力测试,最后找到一个平均值。一个测试环境:MySQL表结构CREATETABLE`user_10w`(`id`int(10)NOTNULLAUTO_INCREMENT,`name`varchar(20)DEFAULTNULL,`mobile`varchar(11)DEFAULTNULL,`add_time`int(11)DEFAULTNULL,`groupid`tinyint(1)DEFAULTNULL,`login_time`int(11)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=MyISAMAUTO_INCREMENT=4730016DEFAULTCHARSET=utf8mb4计算机配置4核Intel(R)Core(TM)i3-8100CPU@3.60GHzssd120G硬盘2.启动测试说明:单机测试,不涉及网卡,网络传输影响测试程序phppdoinclude_once("tool.php");$dsn='mysql:dbname=demo;host=127.0.0.1';$user='root';$pass='root';try{$hand=newPDO($dsn,$user,$pass);}catch(PDOException$e){echo'Connectionfailed:'.$e->getMessage();}$query=$hand->prepare("insertintouser_10w(name,mobile,add_time,groupid,last_login_time)values(?,?,?,?,?)");$n=0;$count=1000000;//每次插入100w$t=time();echo'startwrite,timeis'.$t."\n";while(true){$n++;$name=Tool::getRandomStr(5);$mobile=Tool::getRandNum(9);$group=Tool::getRandNum(1);$rs=$query->execute([$name,'13'.$mobile,time(),$group,time()]);if($n>$count)break;}echo'writeend,timeis'.(time()-$t)."\n";1.没有任何索引,单进程startwrite,timeis1593338798writeend,timeis50耗时50s,平均2w/sec2.添加一个普通的索引namewriteend,timeis60root@test:/data/php#php7pdo.phpstartwrite,timeis1593393695writeend,timeis61慢10s左右,所以索引会导致插入变慢,因为索引加载需要更新3.多进程测试写了一个简单的多进程执行程序packagemainimport("os/exec""sync")varwgsync.WaitGroupfunctestRun(wg*sync.WaitGroup){c:=exec.Command("php7","./pdo.php")c.Run()wg.Done()}funcmain(){varnint=10wg.Add(n)fori:=0;i
