mysql聚簇索引與非聚簇索引

2021-10-10 13:45:03 字數 1068 閱讀 3380

myisam 示意圖

innodb 示意圖

注意: innodb來說,

聚簇索引優缺點 說明

聚簇索引中的每個葉子節點包含主鍵值、事務id、回滾指標(rollback pointer用於事務和mvcc)和餘下的列(如col2)。

每次使用輔助索引檢索都要經過兩次b+樹查詢,看上去聚簇索引的效率明顯要低於非聚簇索引,這不是多此一舉嗎?聚簇索引的優勢在哪?

注:我們知道一次io讀寫,可以獲取到16k大小的資源,我們稱之為讀取到的資料區域為page。而我們的b樹,b+樹的索引結構,葉子節點上存放好多個關鍵字(索引值)和對應的資料,都會在一次io操作中被讀取到快取中,所以在訪問同乙個頁中的不同記錄時,會在記憶體裡操作,而不用再次進行io操作了。除非發生了頁的**,即要查詢的行資料不在上次io操作的快取裡,才會觸發新的io操作。

聚簇索引需要注意的地方

當使用主鍵為聚簇索引時,主鍵最好不要使用uuid,因為uuid的值太過離散,不適合排序且可能出現新增加記錄的uuid,會插入在索引樹中間的位置,導致索引樹調整複雜度變大,消耗更多的時間和資源。

建議使用int型別的自增,方便排序並且缺省會在索引樹的末尾增加主鍵值,對索引樹的結構影響最小。而且,主鍵值占用的儲存空間越大,輔助索引中儲存的主鍵值也會跟著變大,占用儲存空間,也會影響到io操作讀取到的資料量。

為什麼主鍵通常建議使用自增id

聚簇索引的資料的物理存放順序與索引順序是一致的,即:只要索引是相鄰的,那麼對應的資料一定也是相鄰地存放在磁碟上的。如果主鍵不是自增id,那麼可以想 象,它會幹些什麼,不斷地調整資料的實體地址、分頁,當然也有其他一些措施來減少這些操作,但卻無法徹底避免。但,如果是自增的,那就簡單了,它只需要一 頁一頁地寫,索引結構相對緊湊,磁碟碎片少,效率也高。

mysql聚簇索引與非聚簇索引

myisam 示意圖 innodb 示意圖 注意 innodb來說,聚簇索引優缺點 說明 聚簇索引中的每個葉子節點包含主鍵值 事務id 回滾指標 rollback pointer用於事務和mvcc 和餘下的列 如col2 每次使用輔助索引檢索都要經過兩次b 樹查詢,看上去聚簇索引的效率明顯要低於非聚...

聚簇索引與非聚簇索引

聚簇索引介紹 聚簇索引並不是一種單獨的索引型別,而是一種資料儲存方式。具體的細節依賴於實現方式,例innodb的聚簇索引實際上在同乙個結構中儲存了b tree索引和資料行。當表有聚簇索引時,他的資料行實際放在索引的葉子頁 leaf page 術語 聚簇 聚簇索引實現 儲存引擎負責實現索引,因此不是所...

聚簇索引與非聚簇索引

mysql的索引主要使用b 樹和雜湊索引的方式進行組織。雜湊索引底層即是雜湊表,查詢時只需要進行一次雜湊操作即可得到位址,查詢速度比較快,但是查詢時操作只適合 的查詢操作,對於範圍查詢不友好,因此只適用於大多數需求為單錶查詢的情況。mysql中常用的兩大引擎myisam和innodb 對於b 樹的使...