MySQL数据库大量记录更新
我正在考虑最有效的方法,如何下载和更新项目到我的数据库(MySQL)中。我正在处理数万到数百个项目。
我有一个包含项目的表 (table_a)。每天晚上我都会下载新数据,这些数据存储在table_b中。因此,现在是午夜,我将数据下载到 table_b,下载所有数据后,我将开始比较 table_b 和 table_a 之间的数据。 如果table_b中的项目存在于table_a中,那么我将通过table_b编辑table_a中的3-4个数字值。如果这个项目不在table_a中,那么我会将这个项目保存到table_a中。
这样我就可以一天一次更新表 table_a 中的项目。此方法的问题是 - 此过程非常慢...对于大约 20,000 个项目,需要大约 25-30 分钟。 (我的应用程序在 RoR 上运行)
我想问您 - 您能帮我提供更好、尤其更快的方法来将新记录更新到表 (table_a) 中吗? 我将非常感激...提前谢谢你, M。
I am thinking about most effectively a way, how to download and updating items to/in my database (MySQL). I am working with tens of thousands to hundreds items.
I have a table (table_a), that contains items. Every night I am downloading new data and these data are stored in table_b. So - it's midnight, I'll download data to table_b and after download all of data I will start to comparing data between table_b and table_a.
If item in table_b exist in table_a, so I will edit 3-4 number value in table_a by table_b. If this item isn't in table_a, so this item I will save to table_a.
This way I am updating items in my table table_a one time of a day. The problem of this method - this procedure is very slow... for ca 20.000 items it takes ca 25-30 minutes. (my app is running on RoR)
I would like to ask you - can you help me, please, better and especially faster way to update new records into the table (table_a)?
I will be very grateful for it... thank you in advance,
M.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果数据库中提供了所有必需的数据,逻辑不是极其复杂或经常更改,并且性能是一个问题,那么将逻辑迁移到单个 SQL 语句中是最明显的选择之一。
大致如下:
INSERT INTO table_a SELECT * FROM table_b ON DUPLICATE KEY UPDATE value1=table_b.value1, value2=table_b.value2, ....;
If all the required data is available in the database, the logic is not overwhelmingly complex or subject to frequent changes, and performance is an issue, migrating the logic into a single SQL statement is one of your most obvious options.
Something along the lines of this:
INSERT INTO table_a SELECT * FROM table_b ON DUPLICATE KEY UPDATE value1=table_b.value1, value2=table_b.value2, ....;
两个建议:
Two suggestions: