为什么 rails 使用 id 作为主键,我应该在其他列上建立索引吗?
Why does rails use id as primary key and should I index over other columns?
我了解 Rails 上的 Ruby 使用 id
作为其所有 table 的主键属性。我知道这很方便,因为 id 总是不同的,自动递增,并且很容易索引(我认为),但我想知道我是否应该在其他属性上建立索引,如果可能的话。
我有一个网络应用程序,用户可以在其中将图像上传到投资组合中,所以我当然有 User
、Portfolio
和 Image
,以及 Image
table 有两列:
:user_id
:portfolio_id
所以有时我可能想选择属于某个用户的所有图像或某个投资组合或一系列投资组合中的所有图像等'
我应该 Rails 为我经常搜索的属性建立索引吗?如果是这样,有没有办法做到这一点?这样做有什么缺点吗?
我记得前段时间读过一些 gem 可以使 rails 将其他字段作为主键的一部分包含在内,但是如果我只想在它们之上构建索引而不将它们包含在主键中怎么办?
是的,为经常用于搜索的列创建索引是个好主意,值得鼓励。
在您的工作目录中:
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
我了解 Rails 上的 Ruby 使用 id
作为其所有 table 的主键属性。我知道这很方便,因为 id 总是不同的,自动递增,并且很容易索引(我认为),但我想知道我是否应该在其他属性上建立索引,如果可能的话。
我有一个网络应用程序,用户可以在其中将图像上传到投资组合中,所以我当然有 User
、Portfolio
和 Image
,以及 Image
table 有两列:
:user_id
:portfolio_id
所以有时我可能想选择属于某个用户的所有图像或某个投资组合或一系列投资组合中的所有图像等'
我应该 Rails 为我经常搜索的属性建立索引吗?如果是这样,有没有办法做到这一点?这样做有什么缺点吗?
我记得前段时间读过一些 gem 可以使 rails 将其他字段作为主键的一部分包含在内,但是如果我只想在它们之上构建索引而不将它们包含在主键中怎么办?
是的,为经常用于搜索的列创建索引是个好主意,值得鼓励。
在您的工作目录中:
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