为什么rails使用id作为主键,我应该索引其他列吗?

时间:2015-11-14 00:13:47

标签: ruby-on-rails primary-key

我理解Ruby on Rails使用id作为其所有表的主键属性。我理解它很方便,因为id总是不同的,自动递增,并且很容易索引(我认为),但我想知道我是否应该建立一个索引而不是其他属性,如果是可能的。

我有一个网络应用程序,用户可以将图像上传到投资组合中,因此授予我UserPortfolioImageImage表有两列那是:

:user_id
:portfolio_id

因此,有时我可能想要选择属于特定用户的所有图像或某个投资组合或一系列投资组合中的所有图像等等。

我应该让Rails为我经常搜索的属性构建一个索引吗?如果是的话,有没有办法做到这一点?这样做有什么缺点吗?

我记得前段时间读过有些宝石可以让rails包含其他字段作为主键的一部分,但如果我只是想在它们上面建一个索引而不将它们包含在主键中呢?

1 个答案:

答案 0 :(得分:2)

是的,在您经常用于搜索的列上制作索引是一个好主意并鼓励。

在您的工作目录中:

rails generate migration add_indexes_to_images

这将生成一个迁移文件,然后您可以编辑该文件以添加索引:

class AddIndexesToImages < ActiveRecord::Migration
  def change    
    add_index :images, :user_id
    add_index :images, :portfolio_id
  end
end

Read more about migrations and all the things they can do.