Обоснование Rails 5 объединяет сгенерированные по умолчанию таблицы
Команда 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
...
1 ответ
Наткнулся на точный ответ, читая документы на has_and_belongs_to_many
:
Также полезно добавить индексы в каждый из этих столбцов, чтобы ускорить процесс объединения. Однако в MySQL рекомендуется добавлять составной индекс для обоих столбцов, поскольку MySQL использует только один индекс на таблицу во время поиска.
https://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many