Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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:处理大型集合_Mysql_Ruby On Rails - Fatal编程技术网

Mysql Rails:处理大型集合

Mysql Rails:处理大型集合,mysql,ruby-on-rails,Mysql,Ruby On Rails,我已将联系人分组为具有关联订阅的集合。 这些订阅经常被创建和删除 每个联系人集合可以包含大约30.000到50.000个对象 在为30.000个联系人创建订阅时,我迭代contacts集合并填充sql值数组。之后,我手动执行一条包含所有这些值的sql insert语句: sql_values = [] contacts.each do |contact| sql_values << ["(#{contact.id}, #{newsletter.id}, #{contact_gro

我已将联系人分组为具有关联订阅的集合。 这些订阅经常被创建和删除

每个联系人集合可以包含大约30.000到50.000个对象

在为30.000个联系人创建订阅时,我迭代contacts集合并填充sql值数组。之后,我手动执行一条包含所有这些值的sql insert语句:

sql_values = []
contacts.each do |contact|
  sql_values << ["(#{contact.id}, #{newsletter.id}, #{contact_group_id})"]
end
if sql_values.any?
  ActiveRecord::Base.connection.execute(
    "INSERT INTO subscriptions (contact_id, newsletter_id, contact_group_id) VALUES #{sql_values.join(", ")}"
  )
  sql_values = nil
end
sql\u值=[]
联系人。每个do |联系人|

sql_值这是一个非常弱的生产机器,我应该说:)如何检索联系人?使用优化的查询?你不能将关系颠倒过来,在当前对象中使用联系人id吗?我刚刚注意到了这个问题。我正在使用acts_作为标记来标记联系人。因此,contacts集合是一个非常大的sql查询,连接到tags表上。此查询太慢了。是否有人使用acts_作为标记并标记大量数据?也许在缓存的标记列表列上创建索引可以优化select?