定義:資料行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,乙個表中只能擁有乙個聚集索引。通俗的來說是指資料表中每一條資料的相對順序和他們在硬碟中儲存的相對順序是相同的。如下圖所示。
上圖中的位址一欄表示資料儲存的硬碟單元。id是資料表的主鍵,可以將其設定為聚集索引。
資料庫中的innodb儲存引擎採用的儲存結構是b+樹。這裡可以補充一點,之所以儲存結構採用b+樹是因為資料庫中的資料是儲存在硬碟中的,要想訪問資料庫中的資料需要將硬碟中的資料調到記憶體中,如果儲存結構採用平衡二叉樹或者二叉搜尋樹這樣的結構,最多訪問磁碟的次數就是樹的高度,因此如果資料量非常大的話,樹的高度非常的高,這就導致訪問磁碟的次數會很多,嚴重影響資料庫查詢效率,而採用b+樹的儲存結構就不一樣,在innodb中,b+樹的非葉子節點都是索引表,只有葉子節點才是真正的資料,並且b+樹的葉子節點都是用鍊錶連線的。一般b+樹的乙個節點都會儲存乙個磁碟塊大小的資料量,因此每次訪問b+樹的時候都會將乙個磁碟塊的資料調入記憶體,這樣就把訪問磁碟的次數降低了,效率變高。因此innodb的聚集索引的結構可以用下圖來表示。
上圖中的藍色部分就是b+樹的葉子節點,儲存真實的資料,紅色部分是非葉子節點,儲存的是指向真實資料的指標,即非葉子節點是索引表。上圖中的聚集索引是人名。
上圖中聚集索引是用主鍵id,資料型別是int型別。搜尋的過程是從根節點開始,如果id大於等於15且小於56,那麼會將最左邊的子樹對應的磁碟塊載入到記憶體中。如果id大於等於15且小於20,那麼便會將最左邊的子樹載入到記憶體中,進而查詢想要的資料。
定義:資料表中資料行的邏輯順序與磁碟上行的物理儲存順序不同,乙個表中可以擁有多個非聚集索引。
非聚集索引的說明圖如下所示。
從上圖中可以看出非聚集索引也是採用的是b+樹的結構,不過和聚集索引不一樣的地方在於,非聚集索引的葉子節點依然是乙個索引表,指向硬碟中的真實資料。
上圖中的非聚集索引是用人名來作為檢索依據,葉子節點儲存的是人名對應的主鍵id。這種結構的非聚集索引是innodb中的非聚集索引,用來輔助聚集索引進行資訊檢索的。
如果編寫如下sql語句。
select username from
table
where username=
'eric'
上圖的sql語句會按照人名進行檢索,由於人名是非聚集索引,因此找到【eric】對應的主鍵id之後,再根據id進行聚集索引的檢索,從而找到對應的資料塊,這也是非聚集索引的二次查詢。因此innodb中的非聚集索引是輔助聚集索引的。
而myisam儲存引擎中的非聚集索引稍有不同,可以用下圖的b+樹來表示。
上圖中myisam的非聚集索引的葉子節點儲存的是資料行的位址。
聚集索引和非聚集索引
聚集索引和非聚集索引 一 聚集索引和非聚集索引 聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致,聚集索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,因為一旦具有第乙個索引值的紀錄被找到,具有連續索引值的記錄也一定物理的緊跟其後。聚集索引的缺點是對錶進行修改速度...
聚集索引和非聚集索引
本文引自 一種索引,該索引中鍵值的邏輯順序決定了表中相應行的物理順序。聚集索引確定表中資料的物理順序。聚集索引類似於 簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。但該索引可以包含多個列 組合索引 就像 簿按姓氏和名字進行組織一樣。聚集索引對於那些...
聚集索引和非聚集索引
聚集索引和非聚集索引 1 聚集索引 聚集索引,表中的資料儲存位置,根據索引的排序進行實際儲存,因此效率是相當高的。因為聚集索引決定了表中資料行的儲存位置。乙個表不可能有兩個或以上的聚集索引,如果乙個表中已經有乙個聚集索引,那麼這個表中其他的索引都將是非聚集索引。表排列順序 表記錄的排列順序與索引的排...