【发布时间】:2011-04-11 09:15:09
【问题描述】:
我使用的是 SQL Server 2008。
我在表中有一个列NVARCHAR(MAX),我想确保它是唯一的。
该表有 600,000 条记录,并且每天增加 50,000 条记录。
目前,在向表中添加项目之前,我会检查它是否存在于表中,如果不存在,则将其插入。
IF NOT EXISTS (SELECT * FROM Softs Where Title = 'example example example.')
BEGIN
INSERT INTO Softs (....)
VALUES (...)
END
我在标题列上没有索引
最近,我在向表中插入项目时开始出现超时。
维护唯一性的正确方法是什么?
如果真的有帮助,我可以将 NVARCHAR(MAX) 更改为 NVARCHAR(450)
【问题讨论】:
-
您预计有多少重复项?没有? AKA 应该是所有新行?
-
这真的很难说,但大约 5-10% 的插入尝试会因为重复项而被取消..
-
RE:您的最后一句话更改为
NVARCHAR(900)还不够。它需要是NVARCHAR(450)才能在其上创建唯一约束。如果可能的话,为什么是NVARCHAR(max)? -
@Martin Smith:正确。我可以使用 nvarchar(450) 或 varchar(900)。但这会导致我丢失一些超过 900 的标题或丢失其他非英语的标题。
-
为什么很难判断有多少重复条目正在创建/尝试?
标签: .net sql sql-server sql-server-2008