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 回答