面試題 MySQL的innodb和myisam

2021-08-22 16:41:43 字數 2060 閱讀 5609

1. 簡介

索引是一種排好序的用於快速查詢的資料結構。

**根據官網手冊innodb支援b-tree索引、聚簇索引(clustered indexes)、全文索引(full-text search indexes)、不支援hash索引(innodb在內部利用雜湊索引來實現其自適應雜湊索引功能)、不支援t-tree索引。**geospatial indexing support(座標索引支援),支援索引快取;

支援外來鍵、支援事務。鎖粒度是行鎖。

2.聚簇索引

注:與myisam不同的是,innodb葉子節點儲存的是所有的資料。

每個innodb表都有乙個特殊的索引被稱作聚簇索引,它儲存了一行的資料。主鍵可以看做是索引的同義詞,innodb會使用聚簇索引對dml操作進行優化:

通過聚簇索引查詢是很快的,因為索引直接指向包含所有資料的頁。

3.輔助索引

除了聚簇索引之外,其它都被稱為輔助索引(secondary indexes)。輔助索引中的每條記錄都包含了一行的主鍵列及輔助索引指定的列。innodb使用主鍵值搜尋在聚簇索引中的某一行的值。因此有乙個短的主鍵是更有利的。

4.索引的物理結構

除空間索引外,innodb索引是b-tree資料結構。 空間索引使用r-trees,r-trees是用於索引多維資料的專用資料結構。 索引記錄儲存在其b-tree或r-tree資料結構的葉子頁中。 索引頁的預設大小為16kb。

innodb會剩下1/16的頁空間,如果記錄是順序插入,索引頁會利用15/16;如果是隨機插入,會利用1/2到15/16。

通過設定merge_threshold,該值表示當頁面的利用率降低到該值及以下時,會進行頁面合併,節省空間。預設是50%。

也能通過設定innodb_page_size來設定頁面大小。

5.排序索引構建

innodb執行批量載入,而不是在建立或重建索引時一次插入乙個索引記錄。 這種索引建立方法也稱為排序索引構建(sorted index builds)。 空間索引不支援排序索引構建。全文索引支援排序索引。

在排序索引構建構建期間,redo日誌被禁用,但會設定乙個檢查點確保索引構建能忍受宕機或失敗。

6.全文索引

innodb 全文索引(fulltext)是一種倒排索引(inverted index),它儲存單詞列表,並為每個單詞儲存出現的文件列表。

具體倒排索引介紹可以檢視文章:正排索引和倒排索引;

1.索引

myisam支援b-tree索引、支援全文索引 (full-text search indexes)、座標索引支援 (geospatial indexing support)、不支援聚簇索引、不支援hash索引、不支援t-tree索引。

另不支援外來鍵、不支援事務。鎖粒度是表鎖。儲存限制是256tb。

myisam表有以下特徵:

每個myisam表儲存為兩個檔案,資料檔案以.myd結尾,還有乙個索引檔案以.myi結尾。由此可見myisam與innodb的索引並不一樣,myisam的主索引和輔助索引結構上一樣,它們的葉子節點都儲存著某條記錄的位置,而並不儲存資料。

2. myisam表儲存格式

myisam支援三種不同的儲存格式 ,固定格式、動態格式和壓縮格式;當表不包含可變長度的列(varchar, varbinary, blob, or text)時,預設使用固定格式。

1. 建立索引的注意事項

2. 使用索引要注意的事項

面試題 InnoDB 行鎖

innodb 行鎖 行鎖介紹 行鎖特點 偏向innodb 儲存引擎,開銷大,加鎖慢 會出現死鎖 鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。innodb 與 myisam 的最大不同有兩點 一是支援事務 二是 採用了行級鎖。innodb 的行鎖模式 innodb 實現了以下兩種型別的行鎖。對於...

面試題 innodb和myisam的區別

1 innodb支援事務,而myisam不支援事務。2 innodb支援外來鍵,而myisam不支援外來鍵。3 innodb是行鎖,而myisam是表鎖 每次更新增加刪除都會鎖住表 4 innodb和myisam的索引都是基於b 樹,但他們具體實現不一樣,innodb的b 樹的葉子節點是存放資料的,...

面試題 InnoDB與MyISAM的區別

innodb支援事務,myisam不支援,對於innodb每一條sql語言都預設封裝成事務,自動提交,這樣會影響速度,所以最好把多條sql語言放在begin和commit之間,組成乙個事務 innodb支援外來鍵,而myisam不支援。對乙個包含外來鍵的innodb表轉為myisam會失敗 inno...