@AnjeyTsibylskij

Всегда ли нужно использовать внешние ключи?

Есть ли выигрыш в производительности, если использовать внешние ключи в postgresql?

Я понимаю, что внешние ключи по большей части для целостности данных, но не затормаживает ли это процесс при больших объёмах?

Прочитав статью об архитектуре Instagram, я сосредоточил свое внимание на предложении: Решили вертикально разделить данные на несколько баз, с использованием механизма routers из ORM, параллельно избавившись от внешних ключей

Простая задача: есть таблица пользователей и таблица постов. В таблице постов есть поле user_id. Постов очень много. Стоит ли делать внешний ключ и связывать таблицу постов с таблицей пользователей или просто поставить индекс на поле user_id и добиться максимальной производительности?
  • Вопрос задан
  • 1741 просмотр
Решения вопроса 1
terrier
@terrier
Есть ли выигрыш в производительности, если использовать внешние ключи в postgresql?

Видимо имелось в виду, есть ли выигрыш в производительности если НЕ использовать внешние ключи. Да, может быть. Во-первых сама по себе проверка foreign key не бесплатна - это system-level триггер. Во-вторых в постгресе берется ( среди прочего ) SHARED лок на строку в родительской таблице. Соответсвенно - нужно учитывать влияние этого на производительность и следить за дедлоками.

Однако вот вам практический совет - оставьте пока эти ключи, постгрес весьма быстр даже с ними и очень большой вопрос стоит ли жертвовать целостностью данных ради некоторого ( возможно несущественного ) прироста производительности ( а без ключей данные у вас гарантированно разъедутся).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы