gpt4 book ai didi

mysql - 优化 ActiveRecord 查询

转载 作者:可可西里 更新时间:2023-11-01 07:42:14 24 4
gpt4 key购买 nike

我一直在努力优化我的 Rails 应用程序,但我遇到了一个特定的查询:

def self.random_selection(n)
items = scoped(:joins => "JOIN (SELECT id
FROM #{table_name}
WHERE medias_count > 0
ORDER BY RAND()
LIMIT #{n.to_i}
) AS random_ids
ON #{table_name}.id = random_ids.id"
)
items.each do |genre|
genre.medias.sort! do |x,y|
y.vote_total <=> x.vote_total
end
end
items
end

这个想法是它会选择一些随机类型,其中包含媒体。选择后,它将按评分最高的媒体排序,我认为采用“顶级媒体”并在 View 中使用它。

这是一个非常昂贵、丑陋的查询,我希望可以采用一些方法来优化它。

我可以将媒体选择滚动到原始查询中吗?

我应该从另一个方向来处理这个问题并选择随机的高评价媒体并从中获取类型吗? (也可以接受,但如果它没有提供任何改进,那么他们就没有意义)

我正在使用 Rails 3、Ruby 1.9.2 和 MySQL 以及 InnoDB。

最佳答案

我的解决方案

class Genre
scope :having_media, where('medias_count > 0')
scope :random, lambda { |limit| where(:id => random_ids(limit)) }

def self.random_ids(limit)
having_media.select('id').sample(limit).map(&:id)
end

def self.random_selection(limit)
random(10).includes(:medias).each do |genre|
genre.medias.sort! do |x,y|
y.vote_total <=> x.vote_total
end
end
end
end

class Media
scope :voted_higher, reorder('vote_total desc')
end

@random_genres = Genre.random_selection(10)

关于mysql - 优化 ActiveRecord 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6132718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com