我已經通過優化我的Rails應用程序工作,但我被困在一個特定的查詢:優化ActiveRecord的查詢
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
的想法是,它會選擇一些具有在其中媒體隨機流派。一旦被選中,它就會在最高評分的媒體上進行排序,我認爲要採用「頂級媒體」並在視圖內使用它。
這是一個相當昂貴,醜陋的查詢,我想要一些方法來優化它。
我可以將選擇媒體轉換爲原始查詢嗎?
我應該從另一個方向接近這一點,並選擇隨機高評級的媒體,並從他們獲取流派? (也可以接受,但如果它沒有提供任何改進,那麼他們沒有意義)
我使用Rails 3,Ruby 1.9.2和MySQL與InnoDB。
這將是有益的,如果你可以發表你的與此相關的查詢表的精簡下來的例子。另外,哪種模式是上述方法中的? – rjk 2011-05-26 02:21:55
查看答案http://stackoverflow.com/questions/211329/quick-selection-of-a-random-row-from-a-large-table-in-mysql – 2011-05-26 02:55:23
兩張表。流派和媒體 媒體通過多對一來分屬於流派。 – Samuel 2011-05-26 03:30:54