MY艺科社

ThinkPHP PHP MySQL大数据量导入导出

发布时间:14天前热度: 14 ℃评论数:

备注:大数据量指单文本(含office相关文档docx,xlsx)10W+的导入导出。
MySQL有两种非常常用的表类型MyISAM和InnoDB。网上针对这两种表类型的介绍和比较非常多,其中主要的区别就是InnoDB支持事务和行级锁,但MyISAM不支持。MyISAM相对来讲效率比较高,二者各有优劣。

http://www.cnblogs.com/zlcxbb/p/5757173.html
MyISAM 和 InnoDB的适用场景
MyISAM适合:(1)做很多count 的计算;(2)插入不频繁,查询频繁;(3)没有事务。
InnoDB适合:(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。
MyISAM 和 InnoDB的区别
1)MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持
2)mysiam表不支持外键
3)在执行数据库写入的操作(insert,update,delete)的时候,mysiam表会锁表,而innodb表会锁行
4)当你的数据库有大量的写入、更新操作而查询比较少或者数据完整性要求比较高的时候就选择innodb表。当你的数据库主要以查询为主,相比较而言更新和写 入比较少,并且业务方面数据完整性要求不那么严格,就选择mysiam表。因为mysiam表的查询操作效率和速度都比innodb要快

综上,InnoDB在当前的场景下是不错的选择。

http://www.jb51.net/article/51975.htm 
当PHP需要插入大量数据的时候,当一条一条的插入时,会发现IO耗时严重拖性能。
Demo代码:

$params = array(‘value'=>'50′);
set_time_limit(0);
echo date(“H:i:s”);
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
};
echo date(“H:i:s”);

有两种方法可以解决这种问题:
1. 使用事务(InnoDB支持)
比如可以每隔10000或者10000条提交一次事务,这样大大降低了IO

echo date(“H:i:s”);
$connect_mysql->query(‘BEGIN');
$params = array(‘value'=>'50′);

ThinkPHP,PHP,MySQL大数据量导入导出

手机扫码访问

  • 微信公众号二维码