2012-05-08 5 views
3

Railsの - 私は私が頻繁に使用するクエリ持っている3つの表の列の上にクエリのためのインデックス

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

を私は、インデックスやインデックスを追加したい

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

このSQLを生成このクエリをより効率的にするためです。 3つの列に3つの索引を別々に追加するか、3つの列すべてを別々に索引付けする1つの索引を追加する必要がありますか?

答えて

2

最良の方法は、where節を持つすべての要素にヒットするインデックスを作成することです。

データベースは一般に、クエリの特定の部分に対して一度に複数のインデックスを使用することはできません。 3つの索引を追加すると、データベースはどの索引が最大の利益をもたらし、その索引が選択されるかを判断しようとします。クエリの実行計画がどのように決定されるかに応じて、最適なものを選択する場合と選択しない場合があります。このような状況のために

、私は、インデックスを追加することをお勧めしたい:

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

おかげで - 私は答えを編集したの。 –

+0

このようにする理由を説明してくれてありがとう。 – Edward

関連する問題