Обоснование 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

Другие вопросы по тегам