【问题标题】:Updating of large number of records in MySQL database更新 MySQL 数据库中的大量记录
【发布时间】:2011-07-03 13:51:45
【问题描述】:

我正在考虑一种最有效的方法,即如何将项目下载和更新到/在我的数据库 (MySQL) 中。我正在处理数万到数百个项目。

我有一个包含项目的表 (table_a)。每天晚上我都在下载新数据,这些数据存储在 table_b 中。所以 - 现在是午夜,我将数据下载到 table_b,下载完所有数据后,我将开始比较 table_btable_a 之间的数据。 如果 table_b 中的项目存在于 table_a 中,那么我将通过 table_b 编辑 table_a 中的 3-4 个数值。如果这个项目不在 table_a 中,那么这个项目我会保存到 table_a

这样,我每天更新一次表 table_a 中的项目。这种方法的问题 - 这个过程非常慢......对于 ca 20.000 个项目,它需要 ca 25-30 分钟。 (我的应用在 RoR 上运行)

我想问你 - 请你帮我,更好,尤其是更快的方式将新记录更新到表中(table_a)? 我会非常感激...提前谢谢你, M.

【问题讨论】:

  • 您是从 Ruby 应用程序进行更新,还是已经将其转换为数据库中的 UPDATE 语句?
  • 我正在从我的 rails 应用程序更新一个项目。具体来说,我先调用 URL/controller/download_it 再调用 URL/controller/update_it -> 这两个操作都是在控制器中进行的。

标签: mysql ruby-on-rails-3 cron items


【解决方案1】:

如果数据库中的所有必需数据都可用,逻辑不会过于复杂或经常更改,并且性能是一个问题,那么将逻辑迁移到单个 SQL 语句是您最明显的选择之一。

类似这样的事情:

INSERT INTO table_a SELECT * FROM table_b ON DUPLICATE KEY UPDATE value1=table_b.value1, value2=table_b.value2, ....;

【讨论】:

    【解决方案2】:

    两个建议:

    1. 索引:这些应该使查找更快。
    2. 哈希:如果要比较长字符串,最好先创建哈希,然后再将它们存储到数据库中并比较它们的哈希。

    【讨论】:

    • 你能不能更具体一点Roland?比较基于整数值和字符串值。
    • 基本上,字符串比较在 mysql 中确实很昂贵。当我为一个项目构建一个蜘蛛并保存整个 html 正文时,比较结果的成本非常高。
    • 另外,indexs位指的是table_b中table_a的外键的索引。
    • 我现在研究过外键......但我不确定,如果它是我需要的(对不起,也许我只是不明白)。因为在我的情况下——表table_atable_b 完全一样——我的第一个想法,为什么我这样做,是减少table_a 的离线时间——现在用户可以从table_a 和后台搜索信息正在table_a(来自table_b)中运行实现项目并插入新项目。
    • 您能否更详细地解释为什么不能直接在 table_a 上进行插入/更新而不是在 table_b 中缓冲它们?为什么会导致离线时间?
    猜你喜欢
    • 1970-01-01
    • 2017-08-01
    • 2014-04-20
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多