唯一索引与主键索引的比较
唯一索引
唯一索引不允許兩行具有相同的索引值。
如果現有數據中存在重復的鍵值,則大多數數據庫都不允許將新創建的唯一索引與表一起保存。當新數據將使表中的鍵值重復時,數據庫也拒絕接受此數據。例如,如果在 employee 表中的職員姓氏(lname) 列上創建了唯一索引,則所有職員不能同姓。
主鍵索引
主鍵索引是唯一索引的特殊類型。
數據庫表通常有一列或列組合,其值用來唯一標識表中的每一行。該列稱為表的主鍵。
在數據庫關系圖中為表定義一個主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特殊類型。主鍵索引要求主鍵中的每個值是唯一的。當在查詢中使用主鍵索引時,它還允許快速訪問數據。
它們的一些比較:
(1)對于主健/unique constraint , oracle/sql server/mysql等都會自動建立唯一索引;
(2)主鍵不一定只包含一個字段,所以如果你在主鍵的其中一個字段建唯一索引還是必要的;
(3)主健可作外健,唯一索引不可;
(4)主健不可為空,唯一索引可;
(5)主健也可是多個字段的組合;
(6)主鍵與唯一索引不同的是:
a.有not null屬性;
b.每個表只能有一個。
?
1、主鍵
主鍵ID,主鍵既是約束也是索引,同時也用于對象緩存的鍵值。
2、索引
???????*組合或者引用關系的子表(數據量較大的時候),需要在關聯主表的列上建立非聚集索引(如訂單明細表中的產品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條)
?擴展閱讀:
http://topic.csdn.net/t/20041108/15/3532352.html
轉載于:https://www.cnblogs.com/ymj0906/p/4240856.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的唯一索引与主键索引的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10天学安卓-第二天
- 下一篇: 我与ARM的那些事儿2JINLK烧录no