mysql 的Myisam和InnoDB的索引結構

2021-10-20 21:31:00 字數 1263 閱讀 7707

先建立兩個表

1. myisam

myisam的資料檔案是三個, 乙個是原資料和結構, 乙個是索引, 乙個是資料, 大家在建立好之後可以看在資料檔案裡面看下

左側是主鍵的索引結構, b+tree, 葉子節點(最下層)儲存的是資料位址, 通過查詢條件查詢的時候, 查詢的是資料位址, 通過資料位址拿到資料,

右側是普通索引, 拿左側途中的col2欄位作為索引, 和主鍵查詢是一樣的, 查詢的都是資料位址, 通過資料位址拿到資料

innodb的資料檔案時乙個, 所以, 表的索引和資料都是在一起的

左側是主鍵索引, 索引和資料都是存放在一起的, 通過主鍵可以直接查詢到資料

右側是普通索引, 通過普通索引查詢到的資料是主鍵id, 通過主鍵id再去查詢對應的資料, 這裡就存在了乙個回表的過程

3. 總結

可以自己試一下, 在插入資料的時候, 主鍵id可以不按著順序插入, 我們會發現, myisam在插入之後, 主鍵id的順序沒有變, 但是, innodb的資料是根據主鍵id排好序的, 這就是因為, innodb的索引和資料是在一起的, b+tree葉子節點會排序, 所以在插入的時候會根據主鍵id排好序,

我們通常用的表資料引擎一般都是innodb,  在構建索引的時候, 普通索引, 查出來的都是對應資料的主鍵, 然後根據主鍵去查詢的資料, 這裡面存在乙個回表的過程, 而且主鍵在排序的時候是按順序排的, 用整型去查詢和排序肯定是最快的, 所以, 由此可見, 主鍵最好是, 用乙個自增的id, 這樣查詢的會很快, 而且有這個回表, 我們也可以在查詢表的時候, 根據普通索引先去查詢id, 再根據id去查詢想要的資料, 這樣就能避免回表, 尤其是在分頁, 頁數比較大的時候, 效果很明顯

資料量越大的的時候innodb的抗壓能力就越明顯, 效果會更好

小李大人

愛生活愛慧姐

2023年3月3日

MySQL的MyISAM和InnoDB的區別

mysql預設採用的是myisam。myisam不支援事務,而innodb支援。innodb的autocommit預設是開啟的,即每條sql語句會預設被封裝成乙個事務,自動提交,這樣會影響速度,所以最好是把多條sql語句顯示放在begin和commit之間,組成乙個事務去提交。innodb支援資料行...

MYSQL的MYISAM和INNODB的區別

併發帶來的問題,更新丟失舉個栗子 比如5000塊錢,2個人同時操作,你存500我存1000,那麼結果是6000,那500的更新丟失了,少了500塊,所以才需要排他鎖,同一時間,只能乙個人獨佔資料,其他人要改必須要等我改完 當sql server準備更新資料時,它首先對資料物件作更新鎖鎖定,這樣資料將...

mysql中innodb和MyISAM的儲存

一 零鋪墊 在介紹b樹之前,先來看另一棵神奇的樹 二叉排序樹 binary sort tree 首先它是一棵樹,二叉 這個描述已經很明顯了,就是樹上的一根樹枝開兩個叉,於是遞迴下來就是二叉樹了 下圖所示 而這棵樹上的節點是已經排好序的,具體的排序規則如下 從圖中可以看出,二叉排序樹組織資料時,用於查...