Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/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
Mysql 在查询中优化rails以获得数百万个阵列ID_Mysql_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Mysql 在查询中优化rails以获得数百万个阵列ID

Mysql 在查询中优化rails以获得数百万个阵列ID,mysql,ruby-on-rails,ruby,ruby-on-rails-4,Mysql,Ruby On Rails,Ruby,Ruby On Rails 4,希望获得在特定帐户及其各自的出口注册的用户 用户和插座型号没有任何关联 门店拥有且属于多个账户,反之亦然 用户包含字段outlet_代码,该代码在outlet表中是唯一的 @account=account.find(2546) @outlet_id=@account.outlets.map(&:id)#----它返回如下数组[1,2,3…1032457],这是一个动态数组 我使用的这个查询效率不高=>@users=User。其中(:outlet\u code=>@outlet\u id)我认为您

希望获得在特定帐户及其各自的出口注册的用户

用户和插座型号没有任何关联

门店拥有且属于多个账户,反之亦然

用户包含字段outlet_代码,该代码在outlet表中是唯一的

@account=account.find(2546)


@outlet_id=@account.outlets.map(&:id)#----它返回如下数组[1,2,3…1032457],这是一个动态数组


我使用的这个查询效率不高=>@users=User。其中(:outlet\u code=>@outlet\u id)

我认为您需要的是延迟加载和批量处理

在您的案例中,最有效的方法(假设您以任何方式处理收集)是使用:

将返回惰性枚举器的实例:

#<Enumerator::Lazy: ...>
#

现在您可以直接使用它并迭代-
@users
将根据需要从数据库中加载(延迟)。

使用find\u和批大小:-

@users = User.where(:id => [1,2,3....450000]).find_each(batch_size: 50 or no. of records you want to get in batch)
我将返回以下记录:-

#<Enumerator: #<ActiveRecord::Relation [...]>

你能描述一下你想要实现什么,为什么你有一个100万ID的数组?这个ID是如何计算的??你能把它放在这里吗details@outlet_ids=@account.outlets.map(&:id)#----它返回计数超过10个lac记录的特定帐户的所有出口id显示确切地说,与已经给出的答案相比,这个答案是新的?谢谢,但是使用批大小和使用ajax调用查找每个帐户的概念,响应超时,因为返回结果花费了太多时间。此外,我在从上游客户端读取响应标头时,使用批处理2015/12/05 07:29:05[error]上游过早关闭连接时出现此错误。我使用了这个NGINX&MySql。
#<Enumerator: #<ActiveRecord::Relation [...]>
@users = User.where(:id => [1,2,3....450000]).find_each(batch_size: 50 ) do |user|
    # your code here
end
# User Load (0.7ms) SELECT "users".* FROM "users" 
#   ORDER BY "users"."id" ASC LIMIT 50
# User Load (0.6ms) SELECT "users".* FROM "users" 
#   WHERE ("users"."id" > 50) ORDER BY "users"."id" ASC LIMIT 50
# USer Load (0.3ms) SELECT "users".* FROM "users" 
#   WHERE ("users"."id" > 100) ORDER BY "users"."id" ASC LIMIT 50