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

2022-02-08 23:13:37 字數 1399 閱讀 4817

唯一索引

唯一索引不允許兩行具有相同的索引值。

如果現有資料中存在重複的鍵值,則大多數資料庫都不允許將新建立的唯一索引與表一起儲存。當新資料將使表中的鍵值重複時,資料庫也拒絕接受此資料。例如,如果在 employee 表中的職員姓氏(lname) 列上建立了唯一索引,則所有職員不能同姓。

主鍵索引

主鍵索引是唯一索引的特殊型別。

資料庫表通常有一列或列組合,其值用來唯一標識表中的每一行。該列稱為表的主鍵。

在資料庫關係圖中為表定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。主鍵索引要求主鍵中的每個值是唯一的。當在查詢中使用主鍵索引時,它還允許快速訪問資料。

它們的一些比較:

(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條)

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

唯一索引 唯一索引不允許兩行具有相同的索引值。如果現有資料中存在重複的鍵值,則大多數資料庫都不允許將新建立的唯一索引與表一起儲存。當新資料將使表中的鍵值重複時,資料庫也拒絕接受此資料。例如,如果在 employee 表中的職員姓氏 lname 列上建立了唯一索引,則所有職員不能同姓。主鍵索引 主鍵索...

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

唯一索引 唯一索引不允許兩行具有相同的索引值。如果現有資料中存在重複的鍵值,則大多數資料庫都不允許將新建立的唯一索引與表一起儲存。當新資料將使表中的鍵值重複時,資料庫也拒絕接受此資料。例如,使用者表中的身份證 idcard 列上建立了唯一索引,則所有身份證不能重複 主鍵索引 主鍵索引是唯一索引的特殊...

普通索引 唯一索引 主鍵索引 候選索引

1 普通索引 1 定義 最基本的索引型別,沒有唯一性之類的限制。2 建立方式 a 建立索引,例如create index 索引的名字 on tablename 列的列表 b 修改表,例如alter table tablename add index 索引的名字 列的列表 c 建立表的時候指定索引,例...