Ответ
Да, Foreign Key (FK) может негативно влиять на производительность операций INSERT и UPDATE из-за дополнительных проверок целостности. При вставке или обновлении записи с FK СУБД проверяет существование связанной записи в родительской таблице, что требует дополнительных запросов и блокировок.
Основные причины замедления:
- Проверка ссылочной целостности (дополнительный SELECT к родительской таблице)
- Блокировки таблиц во избежание race condition
- Каскадные операции (если настроены ON DELETE/UPDATE CASCADE)
Пример:
-- При вставке в orders будет проверка существования user_id в users
INSERT INTO orders (user_id, amount) VALUES (123, 100);
Как минимизировать влияние:
- Индексируйте FK-поля
- Избегайте избыточных каскадных операций
- Используйте транзакции для пакетных операций
- Временное отключение FK проверок для массовых операций (SET FOREIGN_KEY_CHECKS=0)
Для высоконагруженных систем стоит оценить необходимость FK на уровне приложения.