php - 遍历数组并插入数据的最有效方法是什么

标签 php mysql arrays

我在 php 中有一个数组,它是通过 XML 填充的。这个数组包含大约 21000 个项目。

我目前正在遍历数组,检查名称节点是否存在于数据库(mysql)中,如果它确实更新了它,否则插入新数据并存储插入/更新行的行 ID,然后我在同一个循环将更多数据插入另一个表并将其链接到第一个表: http://pastebin.com/iiyjkkuy

数组如下所示:http://pastebin.com/xcnHxeLk

现在由于阵列中的大量节点 (21000) 这超过了我的开发系统上 300 秒(5 分钟)的最大执行时间..

遍历这种大小的数组并插入数据的最佳方法是什么?

只是关于此的更多信息。我正在使用表达式引擎 1.8.6(工作原因),我必须使用其内置的数据库类。

在每次插入/更新之前使用 select 语句的原因是为以后的语句获取行 ID。数据必须以某种方式在数据库中构建,例如:

每个源节点都有一个papergroup节点——这需要先插入/更新 然后每个论文名称节点需要链接到同一张表中的论文组 然后将 sourceid 等插入到源表中,并链接到论文表中的父论文,因此基本的数据库模式是这样的: 纸组插入纸表 papers 表中插入了 papers 名称和 papers.PID 作为指向 papger 组 papers.ID 的链接 sources 被插入到 sources 表中并链接到 source.paperID 上的 papers 表

填充数组的 XML 源的基本结构如下:

<sources>
<source>
<sourceid>1</sourceid>
<papername>test</papername>
<papergroup>test group</papergroup>
<papertype>Standard</papertype>
<sourcename> test source</sourcename>
<sourcesize>page</sourcesize>
</source>
</sources>

以上不是完整的部分,但它显示了有关在一个部分中发送的所有信息的要点。希望这会有所帮助。

好的,我设法得到了一些时间。获取 XML 需要 1:35:731,然后在 0:0:025 和 0:0:700 之间执行数组循环(选择、插入/更新)

最佳答案

每次插入一条记录都是对数据库的另一次往返。

我想知道如果您可以将这些 SQL 命令批处理到一个往返行程中并同时执行它们,您的生活是否会更好?这样您就可以减少网络延迟。

弄清楚如何优化任何事情的最好方法是掌握一些关于时间花费在哪里的硬数据。找出花费最多时间的事情,改变它,然后重新测量。重复练习,直到获得可接受的性能。

我没有看到您的任何数据。您只是在猜测,在这里回答的其他人(包括我)也是如此。

关于php - 遍历数组并插入数据的最有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7620831/

相关文章:

php - 无法卸载旧版本的 phpunit

php - 如何检查 php 中的闭包?

php - XML - 显示打开和关闭而不是空元素

mysql - 针对许多可能属性的数据库设计

mysql - 基于其他列sql更新列的表达式

javascript - Angular ng-repeat不更新数组

arrays - GO:数组/slice 到常规字符串

php - 如何从 Google 图片搜索中获取 JSON 响应?

python - 使用 GetIndex() 函数

mysql - SQL,如何读出数据并按这种方式排序?