SQL Server: Могу ли я создать «синтетическое» отношение, в котором нет затрат на индексацию или проверку ограничений? - PullRequest
1 голос
/ 01 сентября 2011

То, что я хочу сделать, это обеспечить, чтобы отношение внешнего ключа поддерживалось в схеме базы данных, но по соображениям производительности, не приводить в действие ограничение или нести какие-либо издержки индексации. Его цель - просто документировать отношения. Обычно это называют «синтетическим отношением».

1 Ответ

5 голосов
/ 01 сентября 2011

Нет никаких накладных расходов на индексирование с помощью FK в SQL Server, поскольку для них не создаются индексы по умолчанию.

Вы можете достичь желаемой функциональности в отношении проверки ограничений, отключив FK.

CREATE TABLE T1
(
C1 INT PRIMARY KEY
)

CREATE TABLE T2
(
C1 INT 
)

/*Add FK without checking existing data*/
ALTER TABLE T2  WITH NOCHECK ADD  CONSTRAINT FK_T2_C1 FOREIGN KEY(C1)
REFERENCES T1 (C1)

/*Prevent checking of future data*/
ALTER TABLE T2 NOCHECK CONSTRAINT FK_T2_C1

Помимо оптимизации целостности данных, оптимизатор также может использовать ограничения внешнего ключа для улучшенияпланы запросов ( Ссылка: точка 9 )

Вы определили, что FK вызывает конкретную проблему производительности в вашем случае?

...