`
zfj.rails
  • 浏览: 45008 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

单个update与多个update的效率区别

阅读更多
这段时间项目里遇到有这样一个rake,所以就把它分享了。

valid_hotels_ids = [1, 2, 3, ...]
这是一个需要update的hotel表的id数组。

法一:逐一update
    valid_hotels_ids.each do |id|
      Hotel.update(id, "status = 'VALID'")
    end


统计了一下。四万条数据, 15分钟, 这效率低得。

法二:批量update
    valid_hotels_ids.each_index do |index|
      if index == valid_hotels_ids.length - 1
        Hotel.update_all("status = 'VALID'", "id in (#{valid_hotels_ids[(index-index%500)..index].join(',')})")
        break#这句要加上,不然当length为500的倍数时,下面这句也会被执行,造成重复update
      end

      if (index + 1) % 500 == 0
        Hotel.update_all("status = 'VALID'", "id in (#{valid_hotels_ids[index - 499..index].join(',')})")
      end
    end


统计了一下。同样是四万条数据,半分钟不到就OK了,可见批量update的效率之高喔。

分享到:
评论

相关推荐

    pyMySQL SQL语句传参问题,单个参数或多个参数说明

    在用pymysql操作数据库的过程中,给sql语句传参碰到了很多问题,网上...多个传参用{0}占位符: field = '-' a = 'code' sql_talk="UPDATE cnp.Test set {0}='' where business_registration_code='{1}'".format(a,fi

    vSphere Update Manager 安装和管理

    每个VCH接收硬件资源,能够像管理其他传统虚拟机那样管理VCH,虚拟环境中可以有多个VCH。VCH还为开发人员提供了访问Docker的API。在VCH内运行的轻量级操作系统—称之为Project Photon。作为父操作系统。因此,在将...

    mysql修改语句-mysql

    在 MySQL中,可以使用 UPDATE 语句来修改、更新一个或多个表的数据。 基础语法 UPDATE 语句的基本语法 使用 UPDATE 语句修改单个表,语法格式为: UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句...

    mysql批量更新多条记录的同一个字段为不同值的方法

    首先mysql更新数据的某个字段,一般这样...这里注意 ‘other_values’ 是一个逗号(,)分隔的字符串,如:1,2,3 如果更新多条数据而且每条记录要更新的值不同,可能很多人会这样写: foreach ($values as $id => $myv

    mybatis 动态sql及参数传递

    多个参数传递 传入单个实体(JavaBean/Map) 传入多个实体 传入集合 使用场景 在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的...

    MySQL数据库:数据记录的修改一.pptx

    要修改表中的一行数据,可以使用UPDATE语句,UPDATE可以用来修改一个表,也可以修改多个表。 修改单个表,语法格式: UPDATE 表名 SET 列名1=表达式1 [,列名2=表达式2 ...] [WHERE 条件] 说明: ● SET子句:根据...

    rural-pipe:基于Raspberry Pi的客户端服务器系统,用于统一多个可用网络的带宽,以便在农村地区提供单个较高带宽的网络访问

    农村管道基于Raspberry Pi的客户端/服务器系统,用于统一多个可用网络的带宽,以便在农村地区提供单个较高带宽的网络访问。建造这些安装和构建说明假定与Raspberry Pi(RPI)分开的运行Ubuntu(04.04)的开发机器...

    jdbc的入门小程序之3

    3、execute通常用来执行一些具有单个或多个返回结果集的SQL语句。如select语句。如果有多个结果集,则可以通过调研getMoreResults成员方法不断一道下一个结果集,并通过成员方法getResultSet获取结果,通过成员方法...

    renovate-update-single-module-example:使用Renovate Bot仅更新单个依赖项的示例存储库

    装修更新单个模块的例子 使用Renovate Bot仅更新单个依赖项的示例存储库 仅允许检查依赖项debug更新,应忽略所有其他依赖项(例如chalk )。 这是文件的相关部分,我们禁用所有更新,但使用选项进行程序包debug除外...

    FluentData微型ORM v2.3.0源码2012813

    多个结果集 - 提高性能创下了单个数据库执行多个查询。 自定义返回集合,代替名单中如ProductCollection的。 支持通过自定义的实体工厂创建复杂的实体对象。 提供程序模型,可以很容易添加其他数据库的支持。

    涉及多个数据表的删除和更新操作

    本节讨论如何完成涉及多个数据表的DELETE和UPDATE操作。联结概念在用来完成这些操作的语句里扮演着极其重要的角色,这要求你对前面2.8节里讨论的内容有透彻的理解。  对于只涉及单个数据表的DELETE和UPDATE操作,...

    ember-cli-update:更新Ember CLI项目

    2个用例是: 例如,将项目的样板代码从较旧的Ember版本更新到较新的版本,例如3.4.0至3.20.0。 这些被称为基本蓝图,ember-cli正式提供了3种类型: app , addon和glimmer 。 这与现有的ember init命令不同。 该...

    action-update-go:GitHub行动提议PR提出go模块依赖关系更新

    可以监视多个基础分支(例如main , v1 ) 更新批处理 更新后脚本挂钩 建议的触发器: schedule , workflow_dispatch 。 最简单的设置 steps : - uses : actions/checkout@v2 # If you use Actions "push" for CI...

    海鸥文件内容替换 v2.2.zip

    海鸥文件内容替换工具是一款不需要打开文件,即可替换单个文件或多个文件内容的小工具。它在替换时能够保证文件的安全性和完整性。替换字符的设置和替换文件的设置简单方便。 海鸥文件内容替换功能要点: 一、这是...

    MySql索引详解,索引可以大大提高MySql的检索速度

    单列索引,即一个索引只包合单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。 创建索引时,你需要确保该索引是应用在SQL查询语的条件(一般作为WHERE 子句的条件)实际上,索引...

    Delphi多表查询实现学生与教师管理.rar

    Delphi多表查询实现学生与教师管理,对学生和老师信息进行维护管理,可看作是一个简单的辅助教学管理系统,当然你可在此基础上进行功能扩展提升,以满足更多功能的需要。下面来看核心代码,完整源码请下载实例:  ...

    xftp51228.zip

    例如:会话选项卡能允许用户在单个Xftp窗口中创建和管理多个会话,无需将文件下载下来就可以直接编辑可编辑的文件。同时,用户还可以决定同时下载和上传的数量,以便以最大的性能进行传输。 (2)与终端模拟器...

    Xftp文件传输软件 v5.0.1228简体中文版.zip

    例如:会话选项卡能允许用户在单个Xftp窗口中创建和管理多个会话,无需将文件下载下来就可以直接编辑可编辑的文件。同时,用户还可以决定同时下载和上传的数量,以便以最大的性能进行传输。 (2)与终端模拟器...

    archie-the-architect:一种命令行工具,用于在一个窗口中运行多个任务,以及一些其他实用程序

    一种命令行工具,用于在一个窗口中运行多个任务,以及一些其他实用程序 安装 最好在全球范围内使用Archie,因此要安装,运行npm install -g archie-the-architect 指令 run 运行给定的项目 run-task 运行给定的任务...

    superdocker:Superdocker 可以让你轻松管理多个 docker 配置

    Superdocker 允许您轻松管理多个 docker 主机。 这不适用于集群,这是为了在不同的环境中工作。 例如,假设您使用了三个环境: 本地 boot2docker 安装( boot2docker ) 单个网络 docker 主机( local ) 远程 ...

Global site tag (gtag.js) - Google Analytics