我有一个表,其中包含例如两个字段,我想在数据库中使其唯一。例如:如何在SQL Server中创建多列唯一约束
create table Subscriber (
ID int not null,
DataSetId int not null,
Email nvarchar(100) not null,
...
)
ID列是主键,DataSetId和Email都被编入索引。
我想要做的就是防止表中出现相同的Email和DataSetId组合,或者换句话说,对于给定的DataSetId,Email值必须是唯一的。
我试图在列
CREATE UNIQUE NONCLUSTERED INDEX IX_Subscriber_Email
ON Subscriber (DataSetId, Email)
创建唯一索引,但我发现,这对搜索时间相当显著影响(电子邮件地址,例如搜索时 - 有在150万行表)。
是否有更高效的方式来实现这种类型的约束?
你是说没有索引的搜索比使用索引快得多?这对我来说是新闻,据我所知,索引总是为了加快搜索速度而创建的,而不是放慢搜索速度。 – 2012-08-01 07:51:25
不,这就是它,但它不应该对搜索时间有任何**显着影响?!我们谈论的影响有多大?你能展示执行计划吗?你有更新统计数据吗? – 2012-08-01 07:52:03
在Email和DataSetId上使用'简单'索引搜索电子邮件地址花费了大约1秒。通过添加额外的化合物指数,这增加到约9秒。 – Neilski 2012-08-01 12:24:32