2010-01-13 22 views
5

它會減慢查詢時間以使用大量的唯一索引嗎?我沒有很多IM只是好奇,我想我有這個聽到一些地方獨特指數減慢?

  • ID(主AUTO_INCREMENT)
  • 用戶名(唯一)
  • 密碼
  • 鹽(唯一的)
  • 電子郵件(唯一)
+0

它取決於查詢,發佈它,它是一個完整答案的執行計劃。 – 2010-01-13 21:01:19

+0

比速度更重要的是數據完整性。如果該列必須是唯一的,那麼最好在數據庫中將其標記爲這樣。是插入,更新將會更慢,但是如果完整性不存在,則數據將毫無用處。 – HLGEM 2010-01-13 21:34:45

回答

6

它取決於您正在使用的數據庫服務器軟件和表/索引類型。 任何時候你都有索引時插入會比較慢,但不一定是很多 - 這也取決於表的大小。

一般,唯一索引應該加快任何SELECT查詢您使用的是能夠利用你添加一個唯一的密鑰,以它增加了一個數據庫表中的索引(ES)

+1

是的,插入/更新將做索引維護哪些廣告時間的操作。 – 2010-01-13 21:11:50

0

查詢時間,儘管它們會減慢INSERT和DELETE時間,因爲每個索引值都必須計算,然後插入或刪除。

1

一般來說,擁有更多索引會減慢插入,更新和刪除操作,但可以加快查詢速度 - 假設您基於這些字段進行查詢。

如果您需要一個唯一的索引來保證應用程序的一致性,那麼通常應該添加它,即使它會導致輕微的性能下降。要比正確但錯誤更好。

2

他們會減慢你的插入和更新(因爲每個都必須檢查是否違反約束),但不應該減慢選擇。事實上,他們可以加快速度,因爲優化器有更多選擇來查找數據。

1

每一次的優勢一個非聚集索引。聚簇索引位於主鍵上,並按該列的物理順序對錶中的數據進行排序。每個非聚集索引都會根據唯一鍵進行排序,從而在表的外部創建多個葉子。這允許在唯一密鑰上進行更一致的搜索,因爲不再需要全表掃描。每當您從表格中插入,更新或刪除一行時,服務器都必須返回並更新表格外部的所有葉子。這通常不是問題,如果你有少量的唯一鍵,但是當你有很多它可以減緩響應時間。欲瞭解更多信息,請閱讀維基百科文章here。 Msdn也有一篇很好的文章。