我有一個表,其中包含例如兩個字段,我想在數據庫中使其唯一。例如:如何在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