BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #25622同步于 2014/5/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

PHP往Mysql 插入1千万数据,有这么慢么?都一天了。

youziboy
2014/5/14镜像同步27 回复
在本地使用PHP+Mysql,想在MySql里面查一千万条数据,表的结构很简单: create table user_with_index ( id int(10) not null primary key, name varchar(10) not null); mysql> select now() , id , name from user_with_index order by id desc limit 1; +---------------------+---------+---------------+ | now() | id | name | +---------------------+---------+---------------+ | 2014-05-14 18:01:47 | 3612267 | name_ 3607182 | 我在执行这条语句之前,已经查了一些数据了。 +---------------------+---------+---------------+ 1 row in set (0.00 sec) 昨天下午我开始插入的,怎么现在还没有插完啊? <?php set_time_limit(0); $mysql = mysqli_connect("localhost","root", "123456","test") or die("Error" . mysqli_error($mysql)); set_time_limit(0); $start = microtime(true); for ($i=1; $i<1000*1000*10;$i++) { $query = 'INSERT INTO `user_with_index` (name) values ("name_ ' . $i . '")'; $ret = mysqli_query($mysql,$query); echo mysqli_error($mysql); //我加入了这一天,应该也不会有影响吧? if (!$ret) { var_dump($ret); mysqli_error($mysql); exit; } } $end = (microtime(true) - $start); mysqli_close($mysql); echo "elapsed time: $end"; exit; ?> 另外,大家有哪些方法提高插入数据速度呢?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Suley机器人#1 · 2014/5/14
看看进程是不是死掉了。
youziboy机器人#2 · 2014/5/14
应该是没有死掉吧。 我执行 select now() , id , name from user_with_index order by id desc limit 1; id 结果都是递增的。。。
nuanyangyang机器人#3 · 2014/5/16
试试批量插入? http://stackoverflow.com/questions/5526917/how-to-do-a-batch-insert-in-mysql
wp机器人#4 · 2014/5/16
这么大的量。 拼好sql,用mysql客户端,source命令执行。php下可以用system调用 mysql单表的记录数太大了性能会下降比较厉害,你监控下速度就会发现开始插入很快,后来越来越慢。 最好分下表,单表控制在几百万的水平
youziboy机器人#5 · 2014/5/16
请问如何监控速度啊? 【 在 wp 的大作中提到: 】 : 这么大的量。 : 拼好sql,用mysql客户端,source命令执行。php下可以用system调用 : mysql单表的记录数太大了性能会下降比较厉害,你监控下速度就会发现开始插入很快,后来越来越慢。 : ...................
wmy机器人#6 · 2014/5/16
上千万的数据量换数据库吧。。
z1032172996p机器人#7 · 2014/5/16
你这样得执行一千万次insert,性能会很差的,对于比较大的数据量,最好用load。这里有load和insert性能比较,你看看http://www.itpub.net/thread-510339-1-1.html
yolanda1989机器人#8 · 2014/5/16
一条一条数据的插入也比较慢,可以多个values值写好再插啊
maoxinyu513机器人#9 · 2014/5/16
上面说的很对,一条一条插跑一天很正常,不信你每insert一次print个值出来 用mySQL批量插的语句,我只记得postGRE的