【发布时间】:2011-01-02 19:40:37
【问题描述】:
我有一个大型数据库,客户端在其中存储个人消息并触发电子邮件通知 [如果用户允许]。某些用户可以选择向他们的整个朋友网络发送消息。一些用户在他们的网络中有超过 5000 个朋友,所以如果他们选择整个网络,他们将向超过 5000 个朋友发送消息,系统会将所有消息存储到一个表中。问题是它不会插入超过 1000 条记录并忽略前 1000 条之后的所有插入。我增加了数据包大小,bulk_insert_buffer_size 但仍然没有运气。由于系统将一些信息存储在另一个表中以供报告,因此每个插入都返回其新的消息 ID。因此,我不能使用“插入表(column1,column2)值(value1,value2),(value1,value2)......等等。”
表引擎是 innodb,mysql 版本是 5.1.3,托管在亚马逊网络服务上。我只想解决一次插入超过 1000 条记录的问题。如前所述,它可以正常工作,但最多只能记录 1000 条记录,之后会忽略所有记录。
我正在使用 php foreach(){} 为每个朋友插入消息,如果电子邮件可用,则向用户发送通知。此 foreach(){} 还会在另一个表 [只有 3 列] 中插入相同的记录以生成报告。
【问题讨论】:
-
你的脚本执行需要多长时间?
-
您能否发布一段简短的 sn-p 代码来说明问题所在?您如何确定只有 1000 条记录被插入 - 检查表,或者 MySQL 返回一些错误或警告?这是一个在 web 上下文中运行的 PHP 脚本,它是否遇到了某种超时?
-
感谢您的快速回复。非常感激。 sikas,插入 1000 条记录大约需要 15 秒。 Rob,它是一个简单的 php 脚本,它从表单接收信息并检索朋友的 ID 以传递消息和电子邮件。所有这些都发生在一个 foreach 循环中,它一次插入 2 条记录 [1 为“收件箱”,第二条为“已发送”]。 'sent' 返回新消息的 id 并将其存储到日志表中以供报告。它不会产生任何错误/警告或超时。我检查数据库中的记录号,如果插入超过 1000 条,它总是有 1000 条记录。
标签: php mysql insert limit records