唯一索引
唯一索引不允許兩行具有相同的索引值。
如果現有資料中存在重複的鍵值,則大多數資料庫都不允許將新建立的唯一索引與表一起儲存。當新資料將使表中的鍵值重複時,資料庫也拒絕接受此資料。例如,使用者表中的身份證(idcard) 列上建立了唯一索引,則所有身份證不能重複
主鍵索引
主鍵索引是唯一索引的特殊型別。
資料庫表通常有一列或列組合,其值用來唯一標識表中的每一行。該列稱為表的主鍵。
在資料庫關係圖中為表定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。主鍵索引要求主鍵中的每個值是唯一的。當在查詢中使用主鍵索引時,它還允許快速訪問資料。
比較:
1對於主健/unique constraint , oracle/sql server/mysql等都會自動建立唯一索引;
2主鍵不一定只包含乙個字段,所以如果你在主鍵的其中乙個欄位建唯一索引還是必要的;
3主健可作外健,唯一索引不可;
4主健不可為空,唯一索引可;
5主健也可是多個欄位的組合;
6主鍵與唯一索引不同的是:
(1).有not null屬性;
(2).每個表只能有乙個。
索引的注意事項
1.組合或者引用關係的子表(資料量較大的時候),需要在關聯主表的列上建立非聚集索引(如訂單明細表中的產品id欄位、訂單明細表中關聯的訂單id欄位)
2.索引鍵的大小不能超過900個位元組,當列表的大小超過900個位元組或者若干列的和超過900個位元組時,資料庫將報錯。
3.表中如果建有大量索引將會影響insert、update和delete語句的效能,因為在表中的資料更改時,所有的索引都將必須進行適當的調整。需要避免對經常更新的表進行過多的索引,並且索引應保持較窄,就是說:列要盡可能的少。
4.為經常用於查詢的謂詞建立索引,如用於下拉參照快速查詢的code、name等。在平台現有下拉參照的查詢sql語句中的like條件語句要改成不帶前置萬用字元。還有需要關注order by和group by謂詞的索引設計,order by和group by的謂詞是需要排序的,某些情況下為order by和group by的謂詞建立索引,會避免查詢時的排序動作。
4.對於內容基本重複的列,比如只有1和0,禁止建立索引,因為該索引選擇性極差,在特定的情況下會誤導優化器做出錯誤的選擇,導致查詢速度極大下降。
5.當乙個索引有多個列構成時,應注意將選擇性強的列放在前面。僅僅前後次序的不同,效能上就可能出現數量級的差異。
6.對小表進行索引可能不能產生優化效果,因為查詢優化器在遍歷用於搜尋資料的索引時,花費的時間可能比執行簡單的表掃瞄還長,設計索引時需要考慮表的大小。記錄數不大於100的表不要建立索引。頻繁操作的小數量表不建議建立索引(記錄數不大於5000條)
唯一索引與主鍵索引的比較
唯一索引 唯一索引不允許兩行具有相同的索引值。如果現有資料中存在重複的鍵值,則大多數資料庫都不允許將新建立的唯一索引與表一起儲存。當新資料將使表中的鍵值重複時,資料庫也拒絕接受此資料。例如,如果在 employee 表中的職員姓氏 lname 列上建立了唯一索引,則所有職員不能同姓。主鍵索引 主鍵索...
唯一索引與主鍵索引的比較
唯一索引 唯一索引不允許兩行具有相同的索引值。如果現有資料中存在重複的鍵值,則大多數資料庫都不允許將新建立的唯一索引與表一起儲存。當新資料將使表中的鍵值重複時,資料庫也拒絕接受此資料。例如,如果在 employee 表中的職員姓氏 lname 列上建立了唯一索引,則所有職員不能同姓。主鍵索引 主鍵索...
普通索引 唯一索引 主鍵索引 候選索引
1 普通索引 1 定義 最基本的索引型別,沒有唯一性之類的限制。2 建立方式 a 建立索引,例如create index 索引的名字 on tablename 列的列表 b 修改表,例如alter table tablename add index 索引的名字 列的列表 c 建立表的時候指定索引,例...