我們在我們的Rails 3應用程序中有一個SQL查詢。Ruby追隨者查詢
@followers
返回current_user
之後的用戶的ID數組。
@followers = current_user.following
@feed_items = Micropost.where("belongs_to_id IN (?)", @followers)
有沒有更有效的方法來做這個查詢?
我們在我們的Rails 3應用程序中有一個SQL查詢。Ruby追隨者查詢
@followers
返回current_user
之後的用戶的ID數組。
@followers = current_user.following
@feed_items = Micropost.where("belongs_to_id IN (?)", @followers)
有沒有更有效的方法來做這個查詢?
您擁有的查詢不能再進行真正的優化了。通過在belongs_to_id
上添加一個索引(無論如何你幾乎總是對外鍵進行操作),它可以做得更快,但是這並不會改變實際的查詢。
有寫IN
查詢雖然清潔器的方法:
Micropost.where(:belongs_to_id => @followers)
其中@followers
是值的belongs_to_id
陣列。
+1(嘆氣)是的,這比我的還要乾淨。不得不讚揚安德魯;) – 2012-04-16 22:50:54
這對我來說很好。
不過,如果你正在尋找的代碼字符的實際最低NUMER,你可以改變:
Micropost.where("belongs_to_id IN (?)", @followers)
到
Micropost.where("belongs_to_id = ?", @followers)
其內容更容易一些。
Rails將會看到該陣列並執行IN
。
一如既往的主要紅寶石語言的目標是可讀性,所以很少有改進的幫助。
至於不滿意的查詢,你可以檢查該字段的索引。
他們往往是一個更具體的每個數據庫 - 你只指定了通用的SQL。在你的問題。
只是出於好奇,爲什麼這是低效率或不適合? – Steve 2012-04-16 22:40:35
在查詢速度方面的未來可擴展性問題 – 2012-04-17 02:31:27