Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL数据库中大量记录的更新_Mysql_Ruby On Rails 3_Cron_Items - Fatal编程技术网

MySQL数据库中大量记录的更新

MySQL数据库中大量记录的更新,mysql,ruby-on-rails-3,cron,items,Mysql,Ruby On Rails 3,Cron,Items,我正在考虑一种最有效的方法,如何将项目下载并更新到我的数据库(MySQL)。我正在处理成千上万到数百个项目 我有一个表(表a),其中包含项目。每天晚上我都下载新数据,这些数据存储在表b中。所以-现在是午夜,我将下载数据到表b,下载完所有数据后,我将开始比较表b和表a之间的数据。 如果表b中的项目存在于表a中,那么我将通过表b编辑表a中的3-4个数值。如果此项目不在表a中,则此项目将保存到表a 这样,我每天更新一次表a中的项目。这个方法的问题-这个过程非常慢。。。对于约20.000件物品,大约需要

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

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

这样,我每天更新一次表a中的项目。这个方法的问题-这个过程非常慢。。。对于约20.000件物品,大约需要25-30分钟。(我的应用程序正在RoR上运行)

我想问你-你能帮我更好更快速地将新记录更新到表中吗(table_a)? 我会非常感激的。。。提前谢谢大家,, M.

两个建议:

  • 索引:这些将加快查找速度
  • 散列:如果要比较长字符串,最好先创建散列,然后再将它们存储在数据库中并比较它们的散列

  • 如果数据库中有所有必需的数据,那么逻辑就不会过于复杂或频繁更改,而且性能也是一个问题,那么将逻辑迁移到单个SQL语句是最明显的选择之一

    大致如下:


    插入到表a中,从重复键上的表b中选择*更新值1=表b.value1,值2=表b.value2

    请你说得更具体些好吗?比较基于整数值和字符串值。基本上,在mysql中,字符串比较非常昂贵。当我为一个项目构建spider并保存整个html正文时,比较结果的成本非常高。此外,索引位指的是表b中表a外键的索引。我现在研究了外键。。。但我不确定,如果这是我需要的(对不起,也许我只是不明白)。因为在我的例子中,表格
    表格a
    表格b
    是完全相同的-我的第一个想法,为什么我这么做,是减少了
    表格a
    的脱机时间-现在用户可以从
    表格a
    搜索信息,并且在后台运行
    表格a
    中的实施项目(来自
    表格b
    )以及插入新项目。您能否更详细地解释一下,为什么不能直接在表a上进行插入/更新,而不是在表b中缓冲它们?为什么会导致脱机时间?您是从Ruby应用程序进行更新,还是已经将其转换为数据库内更新语句?我正在更新rails应用程序中的项目。具体来说,我首先调用URL/controller/download\u it,然后调用URL/controller/update\u it->,这两个操作在controller中执行。