2

環境: Rails 3.0.4、MySQL、Ruby 1.8.7

次の表があります。

  create_table "countries", :force => true do |t|
    t.string  "iso",            :limit => 2,                 :null => false
    t.string  "name",           :limit => 80,                :null => false
    t.string  "printable_name", :limit => 80,                :null => false
    t.string  "iso3",           :limit => 3
    t.integer "numcode",        :limit => 2
    t.integer "users_count",    :default => 0
    t.integer "rank"
  end

n 人以上のユーザーがいる国を定期的に検索しています。カウンター キャッシュ 'users_count' にインデックスを追加することは理にかなっていますか?

追加されたユーザーごとにわずかなオーバーヘッドが追加されることはわかっていますが、カウンターキャッシュの仕組みに他に欠けているものがないことを確認したいと思います。

4

1 に答える 1

4

あなたが言うように、インデックスを追加するとcountries、列を使用するクエリを高速化する代わりに、データベースがテーブルに書き込むたびにわずかなオーバーヘッドが追加されます。

経験則として、非常に大量の書き込みがない限り、クエリの句でusers_count列を参照するクエリを大量に実行する場合は、おそらくインデックスを追加する価値があります。where

Rails のカウンター キャッシュ機能は、その国が作成されたときに値を増やし、ユーザーが破棄されたusers_countときに値を減らします。belongs_to

于 2011-03-10T19:45:13.230 に答える