繁体   English   中英

如何使用php向MySQL中插入/更新大量数据

[英]How to insert/update a large amount of data into mysql using php

我有一个Excel工作表,其中包含大量数据。 我正在使用php将数据插入mysql服务器。

我有两个问题

1)如果ID已经存在,我必须更新一行,否则插入数据。

2)大问题:我有超过40,000行,并且由admin设置的sql服务器上的超时为60秒。 当我运行更新/插入查询时,将花费超过60秒钟的时间,因此会发生超时。 因此,整个过程将失败。

有办法吗?

目前,我正在检查学生证是否存在,然后更新否则插入。 我觉得这花了很多时间,导致服务器超时。

我在mysql中也有此字段,说明上次数据更新时间(last_update)。 我当时正在考虑使用该日期,如果该日期已过特定日期(即我上次运行程序的日期),则仅应更新这些行。

无论如何会有所帮助吗?

我可以运行什么查询来检查mysql数据库中的该日期,即如果该日期已过特定日期,则仅需要更新那些行,而无需更新其他所有内容。 (请为我提供上述示例查询的帮助!!!!!!!!!!)

假设您使用的是InnoDB引擎(在最新的MySQL版本中是默认值),则应仅使用事务:将插入循环包装到BEGIN中; ...提交; 块。

默认情况下,每个语句都作为事务运行,并且服务器必须确保数据安全地将其保存到磁盘,然后再继续执行下一条语句。 如果启动事务,然后执行许多插入操作,然后再提交事务,则服务器必须将所有数据刷新到磁盘上。 在现代硬件上,这仅相当于很少的磁盘操作,而不是500k。 另一个考虑因素是使用准备好的语句 服务器必须在执行之前解析每个SQL语句。 这种解析不是免费的,而且解析时间可能比实际查询执行时间更昂贵,这并不罕见。 通常,此解析是每一次完成的,对于您而言,它是500k次。 如果使用准备好的语句,则解析/准备仅执行一次,并且执行语句的成本仅是磁盘写入(如果您处于活动事务中,则会进一步提高成本,因为服务器可以通过延迟写入直到事务提交来批量写入)。

使用这些方法可以带来巨大的改善-我已经看到使用事务将总运行时间从30分钟减少到20秒的情况。

http://php.net/manual/en/pdo.prepared-statements.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM