Published on

October 9, 2016

Понимание недоверенных ограничений в SQL Server

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

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

Синтаксис для проверки доверенного внешнего ключа выглядит следующим образом:

ALTER TABLE [dbo].[ChickenLiver] WITH CHECK CONSTRAINT [FK_EggDropSoup]

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

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

Для решения этой проблемы вы можете использовать скрипт sp_Blitz, который предоставляет полезную документацию, объясняющую недоверенные внешние ключи или проверочные ограничения. Запустив этот скрипт и работая с сгенерированным выводом, вы можете определить любые недоверенные ограничения в вашей базе данных.

Вот пример того, как вы можете использовать скрипт sp_Blitz для проверки недоверенных ограничений:

-- Запустите скрипт sp_Blitz для выявления недоверенных ограничений
EXEC sp_Blitz @CheckConstraints = 1

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

Понимая и решая недоверенные ограничения в вашей базе данных SQL Server, вы можете обеспечить целостность ваших данных и оптимизировать производительность ваших запросов.

Для получения дополнительной информации по этой теме вы можете обратиться к следующим ресурсам:

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.