首页 > 解决方案 > 如果在 Rails 中有复合索引,我是否需要单列索引?

问题描述

我用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 

标签: ruby-on-railspostgresqlrails-migrationscompound-index

解决方案


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

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

将与

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

如果您只是查找帐户。但是,这不会加快单独查找程序的查询(只会加快对“帐户和程序”的查询),但是由于您以相反的方式 ( t.index [:program_id, :account_id]) 创建了复合索引,因此您也可以在两个方向上进行快速查找。


推荐阅读