1

Rails 5 命令rails g migration create_foo_bar_join_table生成以下迁移:

class CreateFooBarJoinTable < ActiveRecord::Migration[5.0] def change create_join_table :foos, :bars do |t| # t.index [:foo_id, :bar_id] # t.index [:bar_id, :foo_id] end end end

为什么生成器使用复合键存根两个(双向)索引?还有为什么他们被注释掉了?我对此感到困惑,找不到任何明确的解释来说明这些建议的默认值。

上述索引是否比以下索引更高效? ... create_join_table :foos, :bars do |t| t.index :foo_id t.index :bar_id end ...

4

1 回答 1

1

偶然发现了阅读文档的确切答案has_and_belongs_to_many

为每个列添加索引以加快连接过程也是一个好主意。但是,在 MySQL 中,建议为两列添加复合索引,因为 MySQL 在查找期间仅对每个表使用一个索引。

https://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many

于 2017-04-20T10:49:47.880 回答