- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 ruby 脚本,可以将 XML 文件导入 MySQL 数据库。它通过循环遍历 XML 文件中的元素来完成此操作,最后
table.where(
value: e['value'],
...
).first_or_create
该脚本必须处理大量数据,其中大部分数据已经在数据库中。因此,它的运行速度非常慢,因为first_or_create 显然会触发很多 SELECT 查询。
有什么办法可以更快地处理这个问题吗?与连接管理有关吗?
谢谢
最佳答案
first_or_create
当然是一种方便的方法,它不太关心更大数据集上的性能。
确保所有索引均已就位。
提高性能的第一个明显方法是:因为每个创建语句都包含在 begin
、commit
事务 block 中。一次插入即 3 个查询。您可以将整个循环放在 transaction
block 中 - 这将为您赢得一些时间,因为它只会执行 begin
和 commit
一次。
请记住,与数据库之间的往返需要相当长的时间,因此将多个语句合并为一个语句是一个明显的性能提升。尝试创建一个 SELECT
查询来查找一批(假设有 1000 条)记录。 DB 将返回 200 个查询不存在,您可以继续为这 200 个查询构建一个 INSERT
语句。
始终执行测量并始终尝试制定您想要达到的性能级别,以免代码过于冗长。
关于mysql - Ruby on Rails : ActiveRecords' first_or_create is very slow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45941091/
我真的很喜欢first_or_create方法: # Find the first user named Scarlett or create a new one with a particular
我正在使用 first_or_create 来填充一个包含电子邮件订阅者(称为成员)列表的表。代码如下: def community_members=(members) sel
我在 Rails 5.2 项目中使用以下代码: c = Country.where(name: "test").first_or_create c.status = "Old" c.save 这行得通
我有这个哈希,它是动态构建的: additional_values = {"grouping_id"=>1} 我想在通过 first_or_create 创建后将其与此记录对象合并: result =
我想区分由 first_or_create 搜索或创建。 record = MasterRecord.where(:name=>'test_data').firest_or_create # and
我的两个模型User和Submission如下: class User {:message => "Please enter a valid email address" } validates
我的应用程序的目标是仅显示包含现有数据的表单页面或新的空白表单。我通过使用在创建用户时创建空白记录的回调来完成此操作。 用户模型: before_create :build_health_profil
我像这样调用 first_or_create : collection = Collection.first_or_create(:title => title) 有没有办法确定结果是现有条目还是新创
我正在关注 Ryan 的 Omniauth with Devise rails 广播。部分代码是: class User "provider_id pass by auth", :uid => "u
我的模型表中有这个索引: UNIQUE KEY `index_panel_user_offer_visits_on_offer_id_and_panel_user_id` (`offer_id`,`p
您好,我有一个非常基本的 csv 导入器,用户可以使用它来导入项目。项目属于:part_number 当用户导入我要首先添加或创建的项目时,通过名称查找或创建零件号。我想要的 CSV 文件列 name
我有一个 ruby 脚本,可以将 XML 文件导入 MySQL 数据库。它通过循环遍历 XML 文件中的元素来完成此操作,最后 table.where( value: e['
是否有原生的 Sequel 方法来实现 Datamapper 的 first_or_create 方法? 或者我必须组合选择和插入吗? 最佳答案 我认为find_or_create应该适合你。 Lik
提前致歉,rails 新手。 某楼主有N条评论,一条评论有1条楼主 问题:为什么我不创建评论? (返回一个 nil 对象) 在 landlands_controller#create 中:如果凭据已在
first_or_create/first_or_create! 方法在 Rails 中有什么作用? 根据documentation , 方法“没有描述”... 最佳答案 来自Guides 先创建 f
在沙盒模式下通过 Heroku 控制台运行开发代码时,我使用 first_or_create 来测试记录是否存在: Right.where(:language => languag
我是 ActiveRecord 的新手,所以这可能是一个愚蠢的问题:我的方法是这样写的: sample_organizations = [ '37 Signals', 'Fog Creek'] sam
我正在尝试使用这个语句: @vote = Vote.where(:resource_id => params[:id], :user_id => current_user.id).first_or_c
我有用于 omni-auth 身份验证的 User 模型。我已对其进行设置,以便可以使用不同的提供商(如 facebook、google 帐户)进行登录。如果在使用这些提供商注册时电子邮件已在数据库中
为了便于解释,我将使用 SQLite 创建一个全新的 Rails (3.2.13) 项目。 rails new TestApp cd TestApp/ rake db:create rails g m
我是一名优秀的程序员,十分优秀!