如果在rails中有复合索引,是否需要单列索引?

时间:2018-06-06 08:33:47

标签: ruby-on-rails postgresql rails-migrations compound-index

我用PostgreSQL在rails中创建了一个表,它是帐户和程序之间的连接表,添加索引的最佳方法是什么?当我同时具有复合索引的顺序时,我是否需要为每个引用提供单个索引index: true

create_table :custom_library_programs do |t|
  t.references :account, index: true, foreign_key: true
  t.references :program, index: true, foreign_key: true
  t.boolean :submitted, default: false

  t.timestamps null: false

  t.index [:account_id, :program_id]
  t.index [:program_id, :account_id]
end 

1 个答案:

答案 0 :(得分:0)

不,你的索引将覆盖你。复合索引的工作方式是它只会按索引定义列的顺序依次使用。例如,您的第一个索引:

t.index [:account_id, :program_id] ##Speeds up queries for accounts or 'accounts & programs'

的工作原理相同

t.index :account_id ##Speeds up queries for accounts

如果您只是查找帐户。然而,这不会加速查询soley查找程序(只会加快'帐户和程序'的查询),但由于你以相反的方式(t.index [:program_id, :account_id])制作了一个复合索引,你也会快速查找两个方向。