惟一索引與主鍵索引的比較

惟一索引與主鍵索引的比較mysql

 

惟一索引sql

惟一索引不容許兩行具備相同的索引值。數據庫

若是現有數據中存在重複的鍵值,則大多數數據庫都不容許將新建立的惟一索引與表一塊兒保緩存

存。當新數據將使表中的鍵值重複時,數據庫也拒絕接受此數據。oracle

例如,若是在employee 表中的職員姓氏(lname) 列上建立了惟一索引,則全部職員不能同姓。性能

主鍵索引優化

主鍵索引是惟一索引的特殊類型。spa

數據庫表一般有一列或列組合,其值用來惟一標識表中的每一行。該列稱爲表的主鍵。設計

在數據庫關係圖中爲表定義一個主鍵將自動建立主鍵索引,主鍵索引是惟一索引的特殊類型。code

主鍵索引要求主鍵中的每一個值是惟一的。

當在查詢中使用主鍵索引時,它還容許快速訪問數據。

 

它們的一些比較:

(1)對於主健/unique constraint ,oracle/sql server/mysql等都會自動創建惟一索引;

(2)主鍵不必定只包含一個字段,因此若是你在主鍵的其中一個字段建惟一索引仍是必要的;

(3)主健可做外健,惟一索引不可;

(4)主健不可爲空,惟一索引可;

(5)主健也但是多個字段的組合;

(6)主鍵與惟一索引不一樣的是:

a.有not null屬性;

b.每一個表只能有一個。

一、主鍵 主鍵ID,主鍵既是約束也是索引,同時也用於對象緩存的鍵值。

二、索引

*組合或者引用關係的子表(數據量較大的時候),須要在關聯主表的列上創建非彙集索引(如訂單明細表中的產品ID字段、訂單明細表中關聯的訂單ID字段)

*索引鍵的大小不能超過900個字節,當列表的大小超過900個字節或者若干列的和超過900個字節時,數據庫將報錯。

 *表中若是建有大量索引將會影響INSERT、UPDATE和DELETE語句的性能,由於在表中的數據更改時,全部的索引都將必須進行適當的調整。須要避免對常常更新的表進行過多的索引,而且索引應保持較窄,就是說:列要儘量的少。

  *爲常常用於查詢的謂詞建立索引,如用於下拉參照快速查找的code、name等。在平臺現有下拉參照的查詢sql語句中的like條件語句要改爲不帶前置通配符。還有須要關注Order By和Group By謂詞的索引設計,Order By和Group By的謂詞是須要排序的,某些狀況下爲Order By和Group By的謂詞創建索引,會避免查詢時的排序動做。

  *對於內容基本重複的列,好比只有1和0,禁止創建索引,由於該索引選擇性極差,在特定的狀況下會誤導優化器作出錯誤的選擇,致使查詢速度極大降低。

  *當一個索引有多個列構成時,應注意將選擇性強的列放在前面。僅僅先後次序的不一樣,性能上就可能出現數量級的差別。

  *對小表進行索引可能不能產生優化效果,由於查詢優化器在遍歷用於搜索數據的索引時,花費的時間可能比執行簡單的表掃描還長,設計索引時須要考慮表的大小。記錄數不大於100的表不要創建索引。頻繁操做的小數量表不建議創建索引(記錄數不大於5000條)

相關文章
相關標籤/搜索