索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。
索引是對數據庫表中一個或多個列(例如,employee 表的姓名 (name) 列)的值進行排序的結構。
如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助于更快地獲取信息。
例如這樣一個查詢:select * from table1 where id=10000。
如果沒有索引,必須遍歷整個表,直到ID等于10000的這一行被找到為止;有了索引之后(必須是在ID這一列上建立的索引),即可在索引中查找。
由于索引是經過某種算法優化過的,因而查找次數要少的多。
可見,索引是用來定位的。
【主要種類】
數據庫索引好比是一本書前面的目錄,能SQL Server的B樹結構加快數據庫的查詢速度。
索引分為聚簇索引和非聚簇索引兩種,聚簇索引 是按照數據存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對于單行的檢索很快。
根據數據庫的功能,可以在數據庫設計器中創建三種索引:唯一索引、主鍵索引和聚集索引。
有關數據庫所支持的索引功能的詳細信息,請參見數據庫文檔。
提示:盡管唯一索引有助于定位信息,但為獲得最佳性能結果,建議改用主鍵或唯一約束。
1.唯一索引
唯一索引是不允許其中任何兩行具有相同索引值的索引。
當現有數據中存在重復的鍵值時,大多數數據庫不允許將新創建的唯一索引與表一起保存。
數據庫還可能防止添加將在表中創建重復鍵值的新數據。
例如,如果在employee表中職員的姓(lname)上創建了唯一索引,則任何兩個員工都不能同姓。
2.主鍵索引
數據庫表經常有一列或多列組合,其值唯一標識表中的每一行。
該列稱為表的主鍵。
在數據庫關系圖中為表定義主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特定類型。
該索引要求主鍵中的每個值都唯一。
當在查詢中使用主鍵索引時,它還允許對數據的快速訪問。
3.聚集索引
在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。
一個表只能包含一個聚集索引。
如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。
與非聚集索引相比,聚集索引通常提供更快的數據訪問速度。
聚集索引和非聚集索引的區別,如字典默認按字母順序排序,讀者如知道某個字的讀音可根據字母順序快速定位。
因此聚集索引和表的內容是在一起的。
如讀者需查詢某個生僻字,則需按字典前面的索引,舉例按偏旁進行定位,找到該字對應的頁數,再打開對應頁數找到該字。
這種通過兩個地方而查詢到某個字的方式就如非聚集索引。
4.索引列
可以基于數據庫表中的單列或多列創建索引。
多列索引可以區分其中一列可能有相同值的行。
如果經常同時搜索兩列或多列或按兩列或多列排序時,索引也很有幫助。
例如,如果經常在同一查詢中為姓和名兩列設置判據,那么在這兩列上創建多列索引將很有意義。
檢查查詢的WHERE和JOIN子句。
在任一子句中包括的每一列都是索引可以選擇的對象。
對新索引進行試驗以檢查它對運行查詢性能的影響。
考慮已在表上創建的索引數量。
最好避免在單個表上有很多索引。
檢查已在表上創建的索引的定義。
最好避免包含共享列的重疊索引。
檢查某列中唯一數據值的數量,并將該數量與表中的行數進行比較。
比較的結果就是該列的可選擇性,這有助于確定該列是否適合建立索引,如果適合,確定索引的類型。