2011-06-10 61 views
1

我有了以下的(有關這個問題)領域的一個「消息」表:製作獨特的指數在技術上不是唯一

SenderID | int 
DateSent | DateTime 

我想知道在這兩個領域創建唯一索引並有一個問題。從技術上講,這個領域的組合並不是一個獨特的組合(即通過設計沒有什麼阻止它),但實際上它會。使用此表的應用程序是一個Web應用程序,因此由於頁面刷新時間等因素,發件人實際上無法立即發送消息。

將此索引設置爲唯一的索引是否可接受?

回答

1

UNIQUE是在同一時間的索引,並且約束。如果它必須是唯一的,而不是唯一的。如果只想提高查詢性能,則可以在2個字段上創建非唯一索引。

+0

它不會加快具有唯一索引的查詢結果嗎? – ajbeaven 2011-06-10 21:50:04

+0

當然是的。但是如果你說'SenderID' +'DateSent'可以有重複(我猜在極少數情況下),並且這是可以接受的,創建唯一索引將防止插入違反唯一約束的記錄。 – a1ex07 2011-06-10 21:53:56

+0

理論上講,雖然實際上可能有人在一秒鐘內發送2條消息 - 即。發送的第一條消息後,他們需要導航到「創造信息」頁面,填寫至少50個字符的有效信息,選擇收件人,然後按發送前的系統,即使有機會創建另一行。 – ajbeaven 2011-10-20 20:06:28

1

如果你讓獨一無二的,你的應用程序運行速度不夠快,你會得到一個鍵衝突。

我不會讓它獨一無二。

+0

當然這是不可能的,一個Web應用程序立即運行? – ajbeaven 2011-06-10 21:49:11

+1

不是「立即」,但在DateTime列類型的分辨率內是非常可能的。我使用完全相同的系統,除了DateTime限制爲1秒的分辨率。當系統運行速度足以創建每秒多於一行時真的很煩人。你的情況是一樣的,只是在較小的時間範圍內。 – 2011-06-10 21:54:37

0

什麼使這個索引中唯一的目的是什麼?我猜在索引中包含DateSent並不會減少查詢時間。

+0

它由DateTime字段排序,所以我認爲它會稍微減少它。 – ajbeaven 2011-06-10 21:46:29

+0

我明白了,你是對的。在這種情況下,您可以創建一個簡單的索引而不是唯一索引 – Fenec 2011-06-10 21:52:55

+0

它是否不會加快具有唯一索引的查詢結果? – ajbeaven 2011-06-10 21:53:47