ตามที่คุณได้ค้นพบกับexistsตัวอย่างของคุณSQL Server สามารถใช้ข้อเท็จจริงที่ว่าคีย์ต่างประเทศเชื่อถือได้เมื่อสร้างแผนแบบสอบถาม
  มีอะไรอีกบ้างที่ฉันแพ้โดยใช้ NOCHECK
นอกเหนือจากข้อเท็จจริงที่ว่าคุณสามารถเพิ่มค่าลงในคอลัมน์ที่ไม่ควรอยู่ที่นั่นตามคำตอบของSte Bovคุณจะมีสถานการณ์เพิ่มเติมที่แผนการสืบค้นจะดีขึ้นเมื่อคีย์ต่างประเทศเชื่อถือได้
นี่คือตัวอย่างหนึ่งที่มีมุมมองที่จัดทำดัชนีไว้
คุณมีสองตารางที่มีข้อ จำกัด FK ที่เชื่อถือได้
create table dbo.Country
(
  CountryID int primary key,
  Name varchar(50) not null
);
create table dbo.City
(
  CityID int identity primary key,
  Name varchar(50),
  IsBig bit not null,
  CountryID int not null
);
alter table dbo.City 
  add constraint FK_CountryID 
  foreign key (CountryID) 
  references dbo.Country(CountryID);
มีหลายประเทศไม่มากนัก แต่เมืองหนึ่งพันล้านและบางเมืองเป็นเมืองใหญ่
ข้อมูลตัวอย่าง:
-- Three countries
insert into dbo.Country(CountryID, Name) values
(1, 'Sweden'),
(2, 'Norway'),
(3, 'Denmark');
-- Five big cities
insert into dbo.City(Name, IsBig, CountryID) values
('Stockholm', 1, 1),
('Gothenburg', 1, 1),
('Malmoe', 1, 1),
('Oslo', 1, 2),
('Copenhagen', 1, 3);
-- 300 small cities
insert into dbo.City(Name, IsBig, CountryID)
select 'NoName', 0, Country.CountryID
from dbo.Country
  cross apply (
              select top(100) *
              from sys.columns
              ) as T;
ข้อความค้นหาที่ดำเนินการบ่อยที่สุดในแอปพลิเคชันนี้เกี่ยวข้องกับการค้นหาจำนวนเมืองใหญ่ต่อประเทศ เพื่อเพิ่มความเร็วให้กับสิ่งที่เราเพิ่มมุมมองการจัดทำดัชนี
create view dbo.BigCityCount with schemabinding
as
select count_big(*) as BigCityCount,
       City.CountryID,
       Country.Name as CountryName
from dbo.City
  inner join dbo.Country
    on City.CountryID = Country.CountryID
where City.IsBig = 1 
group by City.CountryID,
         Country.Name;
 go
create unique clustered index CX_BigCityCount
  on dbo.BigCityCount(CountryID);
หลังจากที่ในขณะที่ความต้องการของการเพิ่มประเทศใหม่มา
insert into dbo.Country(CountryID, Name) values(4, 'Finland');
แผนแบบสอบถามสำหรับส่วนแทรกนั้นไม่มีเรื่องที่น่าประหลาดใจ

ดัชนีคลัสเตอร์แทรกลงในCountryตาราง
ตอนนี้ถ้ารหัสต่างประเทศของคุณไม่น่าเชื่อถือ
alter table dbo.City nocheck constraint FK_CountryID;
และคุณเพิ่มประเทศใหม่
insert into dbo.Country(CountryID, Name) values(5, 'Iceland');
คุณจะจบลงด้วยภาพที่ไม่สวยนี้

สาขาที่ต่ำกว่าอยู่ที่นั่นเพื่ออัปเดตมุมมองที่จัดทำดัชนี การสแกนเต็มตารางCityจะทำอย่างไรหากประเทศที่CountryID = 5มีแถวอยู่ในตารางCityอยู่แล้ว
เมื่อที่สำคัญคือการที่เชื่อถือได้, SQL Server รู้ว่าจะมีแถวในการที่จะตรงกับแถวใหม่ในCityCountry
               
              
INSERTแถวใหม่ที่เกี่ยวข้องกับแถวหลักที่ไม่มีอยู่หรือถ้าคุณลองDELETEแถวที่มีแถวลูกในภายหลัง