可以创建一个具有默认值的新列作为仅元数据操作(而不是数据大小操作):
ALTER TABLE dbo.MyReallyBigTable
ADD MyThingId INT NOT NULL
DEFAULT 0;
但是是否也可以创建这样一个引用另一个表的列作为仅元数据操作?
ALTER TABLE dbo.MyReallyBigTable
ADD MyThingId INT NOT NULL
DEFAULT 0
REFERENCES dbo.MyThing(MyThingId);
理论上这是可能的,因为在引用表中应该只检查一个值。但是,在我的示例中,外键创建似乎是数据大小操作。
您可以这样做,但前提是您不在创建时检查 FK。外键将对后续的 INSERT 和 UPDATE 强制执行,但不会被查询优化器信任。例如:
当你有时间进行表扫描并检查所有行以使 FK 可信时,你可以稍后回来: