2013-06-07 3 views
0

Если у меня есть следующая строка в переносе, будет ли postgresql добавлять неявный индекс? Должен ли я явно добавлять индекс для внешнего ключа? Модели содержат has_many и принадлежат соответственно.Rails Postgres следует добавлять индексы внешнего ключа

t.integer :club_id, 
      :null => false, 
      :options => "CONSTRAINT fk_transactions_club REFERENCES clubs(id)" 
+0

Разве FKeys не объявляются автоматически при использовании 'has_many' /' принадлежит_to'? –

+1

@Denis: Нет, Rails не верит в причудливые вещи, такие как база данных FK. –

+0

@muistooshort: ouch ... такие вещи делают меня настолько рад, что я решил не тратить время на то, когда узнал Ruby. –

ответ

0

От fine manual:

5.3.5. Внешние ключи
[...]
Поскольку DELETE из строки из указанной таблицы или UPDATE из ссылочного столбца потребуется сканирование таблицы ссылающейся строки, соответствующие старое значение, оно часто является хорошей идеей для индексирования ссылочных столбцов. Поскольку это не всегда необходимо, и есть много вариантов, доступных для индексации, объявление ограничения внешнего ключа автоматически не создает индекс для ссылочных столбцов.

Вы - FK ссылаетесь на ПК, поэтому вам, вероятно, не нужно беспокоиться об ОБНОВЛЕНИЯх. Если ваша ссылочная таблица (одна с club_id) будет большой, и вы ожидаете, что часто удаляете строки club, тогда какой-то индекс на club_id должен сделать удаление club строк быстрее. Если у вас нет индекса на club_id, попытка удалить строку club потребует сканирования таблицы в таблице, содержащей club_id, а сканирование таблиц - не ваш друг.

Так что ответ возможно, это зависит от того, как club будет использоваться.

+0

Родительская запись редко удаляется, а затем только мной, поэтому время не является проблемой. Меня больше беспокоит множество выборок из дочерних таблиц, где (: club_id = session [: club_id]) и вставка новых дочерних записей. – markhorrocks

+0

Если вы собираетесь много раз спрашивать о 'club_id', да, индекс - хорошая идея, не зависящая от каких-либо проблем FK. Я думал, что вас интересует только аспект FK. –