2012-05-08 23 views
3

我已經得到了我經常使用的查詢:導軌 - 索引查詢了三個表列

Site.where("mobile_visible = true AND (created_at > :date OR updated_at > :date)", :date => "12-04-30") 

它生產這個SQL

SELECT `sites`.* FROM `sites` WHERE (mobile_visible = true AND (created_at > '12-04-30' OR updated_at > '12-04-30')) 

我要添加一個或多個索引使這個查詢更有效率。我應該爲3列分別添加3個索引還是1個索引分別索引所有3列?

回答

2

最好的方法是構建一個索引,命中你的所有元素是where子句 - 不只是一個。

數據庫通常不能對查詢的特定部分一次使用多個索引。如果您添加三個索引,數據庫將嘗試確定哪個索引可以帶來最大收益,並且會選擇該索引。根據查詢執行計劃的確定方式,它可能會也可能不會選擇最好的一個。

對於這種情況,我建議你添加索引:

add_index :sites, [:mobile_visible, :created_at, :updated_at] 
+0

謝謝 - 我已經編輯了答案。 –

+0

感謝您解釋爲什麼要這樣做。 – Edward