我有一个大型数据库,客户端在其中存储个人消息并发送电子邮件通知[如果用户允许]。某些用户可以选择向其整个 friend 网络发送消息。一些用户在他们的网络中有超过 5000 个 friend ,因此如果他们选择整个网络,他们将向超过 5000 个 friend 发送消息,系统会将所有消息存储到一个表中。问题是它不会插入超过 1000 条记录,并忽略前 1000 条之后的所有插入。我增加了数据包大小,bulk_insert_buffer_size,但仍然没有运气。由于系统将一些信息存储在另一个用于报告的表中,因此每次插入都会返回其新的消息 ID。因此,我无法使用“插入表(列1,列2)值(值1,值2),(值1,值2)....等”。
表引擎是innodb,mysql版本是5.1.3,托管在amazon web服务上。我想要的只是解决一次插入超过 1000 条记录的问题。如前所述,它工作正常,但最多只能处理 1000 条记录,并且会忽略此后的所有记录。
我正在使用 php foreach(){} 为每个 friend 插入消息,如果电子邮件可用,则向用户发送通知。此 foreach(){} 还会在另一个表中插入相同的记录[只有 3 列]以生成报告。
最佳答案
您是否尝试过将查询拆分为更多子查询?也许在单个事务中(因为你使用 InnoDB)?
我不确定 Amazon 是否限制每个查询的插入数量,但一旦他们不限制 SQL 查询的数量,您就可以执行更多 INSERT
并且应该能够修复。
顺便问一下,您确定明文查询插入了全部 5000 个元素吗?您的代码是否会返回最多 1000 行的明文查询?我认为您在读取数据时执行的 SELECT
查询中是否有任何 LIMIT
语句?
关于php - 插入最多仅添加 1000 条记录并忽略此后的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4580127/