Чтобы избежать полного сканирования таблицы при добавлении внешнего ключа, можно использовать указание NOT VALID. 1 Оно пропускает потенциально длительную проверку, что все существующие строки в таблице удовлетворяют новому ограничению. 1
Также можно добавить перед выполнением команды в таблицу действующее ограничение CHECK, допускающее только такие строки, которые удовлетворяют задаваемому ограничению секции. 1 Наличие этого ограничения позволит определить, что таблицу не нужно сканировать для проверки ограничения секции. 1
Ещё один способ — проверить перед вставкой данных, соответствует ли значение внешнего ключа значению первичного ключа родительской таблицы. 2 Например, в SQL Server для этого нужно убедиться, что значение в поле с внешним ключом в запросе INSERT уже было записано в поле с первичным ключом соответствующей таблицы. 2