我试图在mls (PHRETS)之后将大量数据插入到db中。结果对象有大约4500到5000条记录,每个记录有450-475个键,它在某个时候(通常在6-7分钟之后)将数据插入db时给出"HTTP错误500内部服务器错误“,我想是因为服务器的时间限制,我要求服务器人员增加执行的时间限制,但是它还是会产生错误。
这是我被处决的过程
1)在mls中搜索属性
2)我尝试一次插入所有记录,使用内爆来节省执行时间
$qry=mysqli_query($link,"INSERT INTO `rets_property_res` VALUES implode(',', $sql)");使用准备语句的-tried
我们能不能把这些数据存储在某个地方,然后再一次处理,或者我们可以加快处理速度,使所有的数据都在给定的时间框架内工作。
发布于 2016-06-18 15:53:02
实现这一目标的最快方法是抓取一个大块(数千行),将其发送到CSV,并执行负载数据信息。有些环境缺乏使用加载数据本地信息的能力.由于服务器设置导致的LOCAL部件。上面的链接还有一个指向这的链接,该链接声明:
从文本文件加载表时,请使用LOAD DATA INFILE。这通常比使用INSERT语句快20倍。见14.2.6节,“加载数据信息语法”。
我发现这很容易成为事实。
当然,对于速度而言,比单个插入更慢但更好的是将多个插入与一条语句放在一起:
insert myTable (col1,col2) values ('a1','b1'), ('a2','b2'), ('a3','b3');因此,在上面的示例中,有3行用一条语句插入。通常,为了速度,最好一次玩500到1000行(而不是3行)。这一切取决于您的字符串大小,基于您的架构,对于insert语句。
Security :您需要关注第2级sql注入攻击的可能性,尽管这看起来很遥远。但这是有可能的。
以上所有这些看起来都是微不足道的,但是对于一个轶事和UX痛苦的评论,我提供以下内容。我有一个c#应用程序,它可以从Stackoverflow中获取问题,并保存它们的度量标准。不是身体的部分,也不是答案,而是标题和许多计数和日期。我每次在数据库中插入1000个问题(或执行insert ignore或insert on duplicate key update)。在将其转换为LOAD DATA INFILE之前,使用重复使用的预准备语句进行c#/mysql绑定需要花费大约50秒的时间。在将其转换为LOAD DATA INFILE (包括工作台的截断、csv写和insert语句)之后,每1000行大约需要1.5秒。
发布于 2016-06-18 13:02:41
通常,由于最大数据包大小限制 of MySQL (取决于每个插入中有多少数据),您无法一次插入5000行。
试着将它们插入较小的组,例如一次100次或更少。
https://stackoverflow.com/questions/37897221
复制相似问题