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'))

このクエリをより効率的にするために、1 つまたは複数のインデックスを追加したいと考えています。3 つの列に 3 つのインデックスを個別に追加する必要がありますか、それとも 3 つの列すべてに個別にインデックスを作成する 1 つのインデックスを追加する必要がありますか?

4

1 に答える 1

2

最善の方法は、1 つだけでなく、're where' 句のすべての要素にヒットするインデックスを作成することです。

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

この状況では、インデックスを追加することをお勧めします。

add_index :sites, [:mobile_visible, :created_at, :updated_at]
于 2012-05-08T10:28:07.803 に答える