Какова стоимость удаления записи из дочерней таблицы, имеющей ограничение внешнего ключа с родительской таблицей

Например, есть 20 таблиц, которые имеют внешний ключ таблицы, назовем его дочерним. Теперь, когда я удаляю запись из Child, он будет проверять, ссылаются ли на запись откуда-то или нет, это так или какой-то другой сценарий.
Мой вопрос заключается в том, как это отношение внешнего ключа влияет на производительность операции удаления.

На самом деле я использую hibernate, и у меня есть сущность, которая имеет только 3 столбца и используется во многих других сущностях(один к одному) сопоставление.
Я думаю сделать эту сущность встраиваемой для настройки производительности, потому что если я сохраняю ее, то сопоставление между таблицами выполняется с помощью внешнего ключа. Хотя при удалении сущности выполняются только два запроса: — delete parent , затем delete child. Но поскольку на внешний ключ ребенка ссылаются из многих других таблиц с большим количеством записей, поэтому он будет проверять, существует ли ссылка на запись в дочерних таблицах в некоторых таблицах или нет, если нет, то удалите при удалении дочерней записи. Поэтому я хочу решить эту проблему, сделав вложенность дочернего элемента, которая приведет к тому, что столбцы дочернего элемента будут включены в родительские таблицы. Поможет ли это?

1 ответ

  1. Производительность во многом зависит от того, какую СУБД вы используете, как ваши таблицы проектируются, индексируются и хранятся, и сколько у вас данных.

    В целом, внешние ключевые ограничения экономят время и силы и предотвращают ошибки. Без ограничения внешнего ключа вам пришлось бы самому обеспечивать целостность.

    Например, вручную каскадирование удаления или обновления будет выполняться в несколько циклов в базу данных, которые обычно заключаются в транзакцию. Проверка вручную связанных записей для ограничения изменений также потребует дополнительных запросов и передачи данных между сервером и клиентом.

    Если вы что — то пропустили или другой пользователь изменил связанные данные между вашими запросами, вы можете получить недействительные данные, которые могут быть очень дорогостоящими-как с точки зрения времени DBA, так и удовлетворенности клиентов.