私のプログラミング環境はRails2.3とPostgreSQL8(Herokuの共有データベース)です。アプリの構築を開始する前に、インターネットでこの http://devcenter.heroku.com/articles/postgresql-indexes#multicolumn_indexes およびその他の関連リソースを読みました。一般的な方法で:
私のテーブルには2つの列AとBがあり、両方ともインデックスが付けられています。(行は(A、B)ペアの点で一意です)しかし、アプリをビルドした後、myTable.find_by_A_and_B(a、b)とmyTable.find_by_A(a)の2種類の呼び出しでのみテーブルをクエリすることがわかりました。 )。
テーブルには10000以上のエントリがあると予想され、個別のAと個別のBの比率は約3:1です。Aの一意の値ごとに、Bの値が異なる1000以上の行があると予想されます。また、Bの一意の値ごとに、Aの値が異なる行は300行以下になります。
私の質問は、現在のデータベース設定(2つの別々のインデックスを使用)がmyTable.find_by_A_and_B(a、b)呼び出しに関して「効率的」として分類できるかどうかです(PostgreSQLの内部動作についてはわかりません)。また、2つのインデックスを(A、B)の1つのマルチ列インデックスに置き換えるだけで、大幅な速度向上が実現するかどうか。
ありがとうございました。
PSコメントに応えて、もう少し情報があります。このページによると、http://devcenter.heroku.com/articles/databasePostgreSQL8.3 を実行しています。
そして、以下はmyTableの移行スキーマです。
create_table :myTable do |t|
t.string :b
t.integer:a
t.boolean :c, :default => false
end
add_index :mytable, :b
add_index :mytable, :a