创建检查约束时,它将在表的所有行上执行。在其他情况下也会发生这种情况吗?
我的检查约束调用了一个内部带有SQL的函数。在大桌子上,这非常慢。
CREATE FUNCTION CheckUnique(@test NVARCHAR(20))
RETURNS INT
AS
BEGIN
IF EXISTS (SELECT 1 FROM mytable WHERE unique_field = @test)
BEGIN
RETURN 1
END
RETURN 0
END
ALTER TABLE mytable
ADD CONSTRAINT CCheckUnique CHECK([dbo].CheckUnique(unique_field) = 0)
答案 0 :(得分:2)
不要使用函数检查值是否唯一,请使用pd.DataFrame(fruit.split())
:
UNIQUE INDEX
或者,或者,(今天结束了,我完全忘了邀请他们)使用CREATE UNIQUE INDEX uq_unique_field ON dbo.mytable(unique_field);
,@ Marc_s在上面的评论中提醒我:
UNIQUE CONSTRAINT
已知标量函数(尤其是那些引用表的函数)的性能非常差。如果可以,应使用内联表值函数;但是您不能为ALTER TABLE MyTAble
ADD CONSTRAINT UC_unique_field UNIQUE (unique_field);
实现这些功能。不过,这里都不需要。