1

レールrails g migration create_foo_bar_join_tableは、以下のマイグレーションを発生5コマンドに参加:根拠を表生成デフォルト

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

なぜ複合キーで発生スタブうち2つ(双方向)のインデックス?また、なぜ彼らはコメントアウトされていますか?私はこれで混乱し、これらの提案されたデフォルトを持つための明確な説明を見つけることができません。

上記のインデックスは、以下のものより効率的です。 ... create_join_table :foos, :bars do |t| t.index :foo_id t.index :bar_id end ...

+0

私はこれより深くに見する機会を持っていなかった、多分あなたは既にhttps://github.com/rails/rails/blob/master/activerecord/libを見て撮影していますこれに関する詳細は/rails/generators/active_record/migration/templates/migration.rb#L25? – lshepstone

+0

複合インデックスは、特にMySQL向けです。知っておいてよかった。 – jusko

答えて

1

has_and_belongs_to_many上のドキュメントを読んで正確な答えにつまずい:

また、加入プロセスを をスピードアップするためにこれらの列のそれぞれにインデックスを追加することをお勧めします。しかし、MySQLでは、検索中にテーブルごとに1つのインデックス しか使用しないので、両方のカラムに 複合インデックスを追加することをお勧めします。

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

関連する問題