深入了解資料庫儲存引擎

2021-10-06 09:19:42 字數 1495 閱讀 7962

mysql中索引屬於儲存引擎級別的概念,不同儲存引擎對索引的實現方式是不同的。

myisam引擎是mysql5.5.8版本之前預設的儲存引擎,不支援事物,支援全文檢索使用b+tree作為索引結構,葉節點的data域存放的是資料記錄的位址,其結構如下:

上圖是以以col1為主鍵,myisam的示意圖,可以看出myisam的索引檔案僅僅儲存資料記錄的位址。在myisam中,主索引和輔助索引(secondary key)在結構上沒有任何區別,只是主索引要求key是唯一的,而輔助索引的key可以重複。如果想在col2上建立乙個輔助索引,則此索引的結構如下圖所示:

同樣也是一棵b+tree,data域儲存資料記錄的位址。因此,myisam中索引檢索的演算法為首先按照b+tree搜尋演算法搜尋索引,如果指定的key存在,則取出其data域的值,然後以data域的值為位址,讀取相應資料記錄。myisam的索引方式也叫做「非聚集索引」的。

上圖是innodb主索引(同時也是資料檔案)的示意圖,可以看到葉節點包含了完整的資料記錄,這種索引叫做聚集索引。因為innodb的資料檔案本身要按主鍵聚集,所以innodb要求表必須有主鍵(myisam可以沒有),如果沒有顯式指定,則mysql系統會自動選擇乙個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則mysql自動為innodb表生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形。

第二個區別是innodb的輔助索引data域儲存相應記錄主鍵的值而不是位址,所有輔助索引都引用主鍵作為data

域。

聚集索引這種實現方式使得按主鍵的搜尋十分高效,但是輔助索引搜尋需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然後用主鍵到主索引中檢索獲得記錄。

注意:對於innodb表,自動增長列必須是索引。如果是組合索引,也必須是組合索引的第一列,但是對於myisam表,自動增長列可以是組合索引的其他列,這樣插入記錄後,自動增長列是按照組合索引到前面幾列排序後遞增的。

MySQL 常用儲存引擎 深入了解

當表的讀操作遠遠大於寫操作,且不需要事務的支援的時候,可以選用myisam引擎。因為myisam不提供事務支援,也不支援行級鎖和外來鍵。當插入 更新操作需要寫操作時需要把整個表鎖定,效率太低。但是myisam儲存了表的行數,select count from table能直接返回表的行數而不用掃瞄全...

初解資料庫 儲存引擎

資料的基本知識說完之後,下面會介紹一些資料庫的儲存引擎,儲存引擎是資料庫的核心部分,資料庫常見的儲存引擎包括 innodb,myisam,memory。myisam 該儲存引擎是不支援事務的,也不支援外來鍵,由於不支援事務,所以它的查詢速度很快,對事務的完整性沒有要求,並且支援表級鎖,採用的是非聚簇...

深入了解陣列與指標

指標 指標變數用於存放指向型別資料的位址,我們可以通過指標運算 解引用,引用指標變數所指向的資料。例如,對指標變數p1,p2,p3,假定已有值,p1,p2,p3代表指標變數p1,p2,p3所指向的資料,稱為指標變數所指向的變數,簡稱指標指向變數。如果指標變數p1,p2,p3分別存放整型變數i,j,k...