我需要将480.000行加载到远程数据库中。数据库不能在本地访问,它是一个Azure WebApp,所以我不能在服务器上加载SQL语句。
我想知道是否有一种方法可以加快速度,因为这个过程非常慢,就像在25分钟内有4500行,这感觉就像我做错了什么。
我在用
mysql -uxxxx -pxxxx -hremoteapp-on-azure azure_db < .\wp_term_relationships.sql若要加载sql文件,请执行以下操作
INSERT INTO `wp_43_term_taxonomy` VALUES ('2', '2', 'link_category', '', '0', '8');
INSERT INTO `wp_43_term_taxonomy` VALUES ('3', '3', 'post_tag', '', '0', '21');
INSERT INTO `wp_43_term_taxonomy` VALUES ('4', '4', 'post_tag', '', '0', '1423');
INSERT INTO `wp_43_term_taxonomy` VALUES ('5', '5', 'post_tag', '', '0', '21');
INSERT INTO `wp_43_term_taxonomy` VALUES ('6', '6', 'post_tag', '', '0', '106');
INSERT INTO `wp_43_term_taxonomy` VALUES ('16', '16', 'post_tag', '', '0', '41');
INSERT INTO `wp_43_term_taxonomy` VALUES ('18', '18', 'post_tag', '', '0', '154');
INSERT INTO `wp_43_term_taxonomy` VALUES ('20', '20', 'post_tag', '', '0', '279');
INSERT INTO `wp_43_term_taxonomy` VALUES ('21', '21', 'post_tag', '', '0', '41');
INSERT INTO `wp_43_term_taxonomy` VALUES ('25', '25', 'post_tag', '', '0', '429');我读过关于插入优化的文章,但在本例中,查询确实很慢。在我的本地机器上,整个插入时间是20秒或更短,而不是20分钟。
我应该以某种方式使用多条语句来避免往返吗?我可以在PHP中流文件并以1000个插入块提交它。
编辑-为了清楚,我需要确保我优化了我可以从我身边优化的一切,因为我在服务器上没有控制权。
发布于 2015-09-15 18:15:00
由于大多数mysql版本都打开了自动提交,所以使用事务将服务器数据同步到磁盘仅一次,而不是每行一次。
在.sql顶部添加:
BEGIN TRANSACTION;并在结尾处追加:
COMMIT;这将有一个额外的优势,即要么全部插入,要么根本不插入。您的php脚本也是如此。或者,您可以添加begin/commit每一行(例如50000行),以便在批中提交。
发布于 2015-09-16 00:04:16
生成INSERT语句最多可达1000行。在auto_commit=ON模式下执行它们。
前者减少了往返行程,还减少了执行语句的其他开销。后者避免发送BEGIN/COMMIT。在提交之前等待一百万行,将通过构建一个巨大的“撤消”日志来减缓速度,然后必须对其进行刷新。
https://dba.stackexchange.com/questions/115122
复制相似问题