數據庫系列:索引總結

一、索引定義
索引,使用索引可加快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種存儲結構
在關係數據庫中,索引是一種與表有關的數據庫結構,它可以使對應於表的SQL語句執行得更快。當表中有大量記錄時,若要對錶進行查詢:
第一種搜索信息方式是全表搜索,是將所有記錄一一取出,和查詢條件進行一一對比,然後返回滿足條件的記錄,這樣做會消耗大量數據庫系統時間,並造成大量磁盤I/O操作;
第二種就是在表中建立索引,然後在索引中找到符合查詢條件的索引值,最後通過保存在索引中的ROWID(相當於頁碼)快速找到表中對應的記錄。
索引是一個單獨的、物理的數據庫結構,它是某個表中一列或若干列值的集合 和 相應的指向存儲在表的指定列中的數據值的指針,順指針能找到包含該值的行。
索引是爲了加速對錶中數據行的檢索而創建的一種分散的存儲結構。索引是針對表而建立的,它是由數據頁面以外的索引頁面組成的,每個索引頁面中的行都會含有邏輯指針,以便加速檢索物理數據。
二、索引的作用
(1)快速取數據;
(2)保證數據記錄的唯一性;
(3)實現表與表之間的參照完整性;
(4)在使用ORDER by、group by子句進行數據檢索時,利用索引可以減少排序和分組的時間。
三、索引的優缺點
優點
1.大大加快數據的檢索速度;
2.加速表和表之間的連接;
3.創建唯一性索引,保證數據庫表中每一行數據的唯一性;
4.在使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間。
缺點
1.索引需要佔物理空間。
2.當對錶中的數據進行增加、刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度。
四、索引類型
根據數據庫的功能,可以在數據庫設計器中創建四種索引:普通索引、唯一索引、主鍵索引和聚集索引
普通索引
最基本的索引類型,沒有唯一性之類的限制。普通索引可以通過以下幾種方式創建:
創建索引,例如 CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表, 例如 ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
ALTER INDEX <舊索引名>RENAME TO<新索引名>;
創建表的指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );
唯一索引
唯一索引是不允許其中任何兩行具有相同索引值的索引
當現有數據中存在重複的鍵值時,大多數數據庫不允許將新創建的唯一索引與表一起保存。數據庫還可能防止添加將在表中創建重複鍵值的新數據。例如,如果在 employee 表中職員的姓 (lname) 上創建了唯一索引,則任何兩個員工都不能同姓。
對某個列建立UNIQUE索引後,插入新紀錄時,數據庫管理系統會自動檢查新紀錄在該列上是否取了重複值,在CREATE TABLE 命令中的UNIQE約束將隱式創建UNIQUE索引。
創建唯一索引的幾種方式:
創建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表, 例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
創建表的指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );
主鍵索引
數據庫表經常有一列或列組合,其值唯一標識表中的每一行。該列稱爲表的主鍵。
在數據庫關係圖中爲表定義主鍵將自動創建主鍵索引主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對數據的快速訪問。
提示儘管唯一索引有助於定位信息,但爲獲得最佳性能結果,建議改用主鍵索引。
聚集索引(聚簇索引)
聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同一個表只能包含一個聚集索引。 如果某

索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的數據訪問速度聚集索引更適用於對很少對基表進行增刪改操作的情況
五、關於索引的一些說明
索引的維護和使用:由DBMS自動完成維護和自動選擇是否使用索引以及使用哪些索引。
創建索引SQL一般格式是:CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED] INDEX <索引名> ON <表名> ( <列名>[ASC|DESC] [, <列名>[ASC|DESC]...] )
UNIQUE—------------建立唯一索引
CLUSTERED——------建立聚集索引 ASC——索引升序排序。
NONCLUSTERED——建立非聚集索引 DESC——索引降序排序。
說明:與表一樣,索引也需要有唯一的名字,且基於一個表來建立,可以根據表中的一列或者多列,當列的順序都是升序默認可不比標出,當屬性列有按照降序排列的,所有屬性的升序降序都不要標明。
刪除索引:DROP INDEX<索引名> 刪除索引時,DBMS不僅在物理刪除相關的索引數據,也會從數據字典刪除有關該索引的描述
六、使用索引的一些建議
1.只有當經常查詢索引列中的數據時,才需要在表上創建索引。
2.在較大表建立索引,表中的數據越多,索引的優越性越明顯。
3.最好避免在單個表上有很多索引。
4.最好避免包含共享列的重疊索引。
5.確定索引的有效性:檢查查詢的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以選擇的對象
6.檢查某列中唯一數據值的數量,並將該數量與表中的行數進行比較。比較的結果就是該列的可選擇性,這有助於確定該列是否適合建立索引,如果適合,確定索引的類型

參考資料:1. 周屹 李豔娟.數據庫原理及開發應用(第二版):清華大學出版社,2013:90
2. 王珊 薩師煊.數據庫系統概率(第5版):高等教育出版社,2014:88-89




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章