深入理解數據庫索引

深入理解數據庫索引

什麼是索引

1. 索引是指針,指向表裏的數據。
2. 索引通常與相應的表示分開存儲的,其主要目的是提高數據檢索的性能。
3. 索引的創建於刪除不會影響到數據本身,但會影響到數據檢索的速度。
4. 索引也會佔用表空間,而且可能會比表本身大

聚集索引(clustered index,也稱聚類索引、簇集索引)

聚集索引是指數據庫錶行中數據的物理順序與鍵值的邏輯(索引)順序相同。
一個表只能有一個聚集索引,因爲一個表的物理順序只有一種情況,所以,對應的聚集索引只能有一個。

舉例:

  1. 定義數據庫時定義一個自增id字段(物理存儲也按照這個id自增)
  2. 字典存儲中,按照拼音排序,字典的正文部分本身就是一個目錄,您不需要再去查其他目錄來找到您需要找的內容。

非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)

該索引中索引的邏輯順序與磁盤上行的物理存儲順序不同。
數據行不按非聚集索引鍵的順序排序和存儲。

如何使用 聚集索引與非聚集索引

動作描述 使用聚集索引 使用非聚集索引
列經常被分組排序
返回某範圍內的數據 不應
一個或極少不同值 不應 不應
小數目的不同值 不應
大數目的不同值 不應
頻繁更新的列 不應
外鍵列
主鍵列
頻繁修改索引列 不應

索引如何工作

index_visit_table

索引分類

單字段索引

基於一個字段創建的索引
CREATE INDEX INDEX_NAME
ON TABLE_NAME(COLUMN_NAME)

唯一索引

唯一索引不允許表裏有重複值,除此之外與普通索引相同。
CREATE UNIQUE INDEX INDEX_NAME
ON TABLE_NAME(COLUMN_NAME)

注: 允許NULL值得字段上不能創建唯一索引

組合索引

 基於表裏的兩個或多個字段建立的索引。
 在創建組合索引時,需要考慮性能的問題,因爲字段在索引裏的順序對數據檢索的速度有很大影響。
 CREATE INDEX INDEX_NAME
ON TABLE_NAME(COLUMN1,COLUMN2)

隱含索引

隱含索引是數據庫服務程序在創建對象時,自動創建的。
數據會爲主鍵約束和唯一性約束自動創建索引。(主鍵和唯一性約束在插入數據時都需要檢查唯一性,建立索引可以使唯一性檢查效率更高)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章