У вас есть много справочных таблиц, и у вашей большой главной таблицы есть столбцы, указывающие на каждую из них.Это обычный способ создания группы таблиц.
Какую цель служат вашим отношениям с ФК?Они обеспечивают согласованность базы данных, и это может быть полезно.Например, если в основной таблице у вас есть столбец с именем food_id
, и он указывает на строку в таблице из шести строк с именем food
, ваши отношения fk не позволят вам вставить значение, указывающее на восьмую строку..
Но для убедительности этой согласованности требуется много проверок значений.Это делает ваши вставки и обновления медленными.Вы знаете, что.
Я предлагаю вам просто удалить все отношения внешнего ключа из основной таблицы в ссылочные таблицы и удалить индексы для этих столбцов в основной таблице.Худшее, что может случиться?Вы получаете случайное значение в одном из тех столбцов, которое указывает на несуществующую строку в справочной таблице.Вы можете уменьшить это следующим образом:
SELECT main.item, main.item2, COALESCE (food.name, '--missing--') name
FROM main
LEFT JOIN food on main.food_id = food.food_id
При левом соединении будет отсутствовать значение для отсутствующего значения food_id
, а COALESCE()
покажет значение по умолчанию.
ИВаши операции вставки станут быстрыми.