所以我读了this question,回答和评论,但它没有回答我的情况,当列是外键时该怎么办?
以下是我创建相关表格的原始迁移:
class CreateTemplates < ActiveRecord::Migration[5.1]
def change
create_table :templates, id: :uuid do |t|
t.references :account, type: :uuid, foreign_key: true
t.string :name
t.text :info
t.string :title
t.timestamps
end
end
end
由于account_id是foreign_key(并标识了客户),因此它将出现在此表的几乎所有(99%)查询中。
现在已确定名称对于帐户应该是唯一的,因此模型已更新:
validates_uniqueness_of :name, scope: [:account]
所以一旦我添加联合索引:
add_index :templates, [:name, :account_id], unique: true
我应该删除account_id上的索引吗?
我问,因为在SQLLite中(参见this),似乎答案是我不需要在account_id上使用单个索引并在第一个位置使用account_id创建我的新索引:
add_index :templates, [:account_id, :name], unique: true
我正在使用postgres,同样的想法适用吗?
答案 0 :(得分:2)
如果它不是第一个索引,你必须添加额外的索引。
所以如果你有这个:
add_index :templates, [:name, :account_id], unique: true
那么你不应该删除原来的:account_id
外键索引,因为它是第二个索引。
我建议你阅读索引实现。这非常有趣,你可以从中学到很多东西。