數據庫索引淺析

聚集索引和非聚集索引,建議多看看。

針對SQL server,有如下資料:

http://www.cnblogs.com/aspnethot/articles/1504082.html

http://www.cnblogs.com/lwzz/archive/2012/08/05/2620824.html (推薦)

http://blog.csdn.net/baoqiangwang/article/details/5981381 

<<MySQL技術內幕:InnoDB存儲引擎(第2版)>>姜承堯



聚集索引:索引的鍵值邏輯順序決定了記錄的物理順序:聚集索引確定表中數據的物理順序。

                 1、 因此一個表只能包含一個聚集索引,但是該索引可以包含多個列。

                  2、聚集索引對於經常搜索的範圍查詢的字段更有效,因爲聚集索引定位開始條件的記錄後,可以通過物理檢索所有相鄰的行,然後很快定位到結束條件,即終止檢索。如日期範圍。

                  3、當索引值唯一時,使用聚集索引很有效。一般索引值唯一時,可以用聚集索引或者primary key索引。

                 4、當一個表創建了聚集索引時,這個表的物理存儲採用B樹方式。葉子節點即數據節點。

                 5、B樹+IAM保證了聚集索引的搜索可以避免邏輯查找,而使用物理查找的方式,就可以儘量減少磁臂的移動,從而縮短查詢時間。

非聚集索引:索引鍵值的邏輯順序與磁盤上存儲記錄的物理順序不同。

                 1、不需要物理順序相鄰,因此分配時,採用堆的方式存儲記錄。即後插入的後分配(可能是磁盤的後面位置,也不一定),不管後插入的數據邏輯上應該安排在哪個位置。

                  2、索引是用B樹組織的,葉子節點還是索引,是指向具體數據的指針。因此,數據並不一定物理相鄰的。

                  3、創建非聚集索引,不影響原來數據的物理順序。因此可以在包含聚集索引的表上創建非聚集索引。

                 4、可以創建多個非聚集索引,但是隻能創建一個聚集索引,因爲物理順序只能有一種。

                 5、當在含聚集索引的表上創建非聚集索引時,對非聚集索引的索引有一定影響:葉子節點的定位符是指向具體數據的聚集鍵(而非指向具體數據的指針。)

補充:

<<MySQL技術內幕:InnoDB存儲引擎(第2版)>>姜承堯著,裏面講到聚集索引相鄰並不一定是物理存儲相鄰。



                   

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