如果在 rails 中有复合索引,我是否需要单列索引?
Do I need single column indexing if have compound indexing in rails?
我用 PostgreSQL 在 rails 中创建了一个 table,它是帐户和程序之间的连接 table,添加索引的最佳方法是什么?当我有两个复合索引顺序时,是否需要为每个参考文献使用单个索引 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
不,您拥有的索引会涵盖您。复合索引的工作方式是它只会按照索引定义的列的顺序顺序使用。例如你的第一个索引:
t.index [:account_id, :program_id] ##Speeds up queries for accounts or 'accounts & programs'
效果与
相同
t.index :account_id
##Speeds up queries for accounts
如果您只是查找帐户。然而,这不会加快查询的速度,因为只查找程序(只会加快对 'accounts & programs' 的查询),但是由于您以相反的方式( t.index [:program_id, :account_id]
)创建了复合索引,因此您也可以快速查找两个方向。
我用 PostgreSQL 在 rails 中创建了一个 table,它是帐户和程序之间的连接 table,添加索引的最佳方法是什么?当我有两个复合索引顺序时,是否需要为每个参考文献使用单个索引 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
不,您拥有的索引会涵盖您。复合索引的工作方式是它只会按照索引定义的列的顺序顺序使用。例如你的第一个索引:
t.index [:account_id, :program_id] ##Speeds up queries for accounts or 'accounts & programs'
效果与
相同t.index :account_id
##Speeds up queries for accounts
如果您只是查找帐户。然而,这不会加快查询的速度,因为只查找程序(只会加快对 'accounts & programs' 的查询),但是由于您以相反的方式( t.index [:program_id, :account_id]
)创建了复合索引,因此您也可以快速查找两个方向。