Nei*_*ski 18 sql-server indexing duplicates
我有一个表,包含,例如,我想在数据库中使两个字段唯一.例如:
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万行).
有没有更有效的方法来实现这种类型的约束?
Rem*_*anu 32
但我发现这对搜索时间有很大影响(例如搜索电子邮件地址时)
您定义的索引(DataSetId, Email)不能用于基于电子邮件的搜索.如果要Email在最左边的位置创建一个索引,可以使用它:
CREATE UNIQUE NONCLUSTERED INDEX IX_Subscriber_Email
   ON Subscriber (Email, DataSetId);
该索引既可以作为唯一约束强制执行,也可以作为快速搜索电子邮件的方法.此索引虽然不能用于快速搜索特定的DataSetId.
它的要点是,无论何时定义多键索引,它都只能用于按键顺序搜索.索引on (A, B, C)可用于在列A上搜索值,用于搜索两者上的 值A和/ B或搜索所有三列上的值A,B以及C.但是,它不能用于单独搜索B或打开值C.
| 归档时间: | 
 | 
| 查看次数: | 27648 次 | 
| 最近记录: |