2015-05-23 76 views
0

在我的Rails應用程序,我做了一系列搜索組對象的很多,像Rails:將索引幫助範圍搜索?

scope :best_of_the_week, ->(time) do 
    start_time = time.beginning_of_week 
    end_time = time.end_of_week 
    where("created_at > ? AND created_at < ?", start_time, end_time).where('votes_count > ?', 300).order('votes_count DESC').first(8) 
    end 

在這種情況下,我需要索引添加到created_at?怎麼樣votes_count?

另外,我怎麼能優雅地結合前兩個搜索?或者將它們結合起來有什麼區別?

回答

0

如果您希望查詢此查詢的最大性能,請爲兩者創建索引。如果你不想創建太多的索引,你應該索引created_at,日期似乎隨着時間的推移(和數據庫的大小)有一個更大的範圍。

我喜歡使用find_by_sql並讓SELECT檢索基本數據以提高性能,如果您有太多的var chars字段,這將會產生很好的影響。

只是爲了sintax糖

where("between ? and ?", start_time, end_time).(other stuff) 
+0

有'between'和''<' '>什麼區別?我應該選擇哪一個? – cqcn1991

+0

我曾經搜過,找不到解釋,通常我之間用,因爲更具可讀性,直到現在我沒有任何問題。 –