InnoDB-和-MyISAM-的數據分布是什麼樣的?(1),web開發環境搭建

Java武器大師 2021-09-18 13:02:27 阅读数:668

innodb- innodb myisam- myisam 分布

INSERT test(id, num, tag) VALUES(1, 11, ‘no.9’);
複制代碼


#### MyISAM的數據存儲
MyISAM按照數據插入的順序存儲在磁盤上,我們假設第一行數據在數據庫錶文件中的偏移比特置是1,以此類推。 如下圖
![InnoDB-和-MyISAM-的數據分布是什麼樣的?(1),web開發環境搭建_程序員](https://s4.51cto.com/images/20210918/1631941066455322.jpg)
現在我們驗證一下,使用 `SELECT * FROM test;` 掃描全錶(SELECT * 不會使用任何索引,可以用 `explain` 實際觀察下),輸出的順序正是我們sql插入的順序,大家可以調整sql的順序再次插入,觀察輸出順序。
![InnoDB-和-MyISAM-的數據分布是什麼樣的?(1),web開發環境搭建_Web_02](https://s8.51cto.com/images/20210918/1631941067173878.jpg)
搞清楚了MyISAM的數據存儲方式,再來看下主鍵索引的存儲。我們假設每個磁盤塊只能存儲兩個節點數據,MyISAM的主鍵分布如下圖:
![InnoDB-和-MyISAM-的數據分布是什麼樣的?(1),web開發環境搭建_前端_03](https://s6.51cto.com/images/20210918/1631941067578161.jpg)
其實MyISAM的二級索引和主鍵索引並無區別,只是名稱不同罷了,二級索引key(num)分布如下圖:
![InnoDB-和-MyISAM-的數據分布是什麼樣的?(1),web開發環境搭建_前端_04](https://s4.51cto.com/images/20210918/1631941068581943.jpg)
二級索引子節點也只存儲了索引列(num)和文件的偏移量(P),但可以看出num是有序的,這在範圍查找(比如:`where num > 3`)是非常有利的,但文件的偏移量並沒有規律,當需要回錶查詢其他字段,可能會導致多次隨機I/O。
當對增加數據時MyISAM直接添加到文件尾部,不需要移動其他數據,而且更新主鍵時,也不會導致其他行數據移動,但它不支持行級鎖,修改時直接鎖錶。若不需要事務支持,對讀多寫少的場景可以考慮MyISAM引擎,但不要默認使用MyISAM引擎。
#### InnoDB的數據存儲
InnoDB支持聚簇索引,所以使用非常不同的方式存儲同樣的數據。InnoDB數據存儲方式如下圖:
![InnoDB-和-MyISAM-的數據分布是什麼樣的?(1),web開發環境搭建_程序員_05](https://s5.51cto.com/images/20210918/1631941069534336.jpg)
注意整個樹和MyISAM的主鍵索引非常類似,唯一的區別是葉子節點,InnoDB的葉子節點存儲了整個行數據(`id、num、tag`),而不是只有索引。聚簇索引“就是”整個錶,而不像MyISAM那樣需要單獨的行存儲文件。當更新主鍵id時,可能會導致數據行移動,因為索引和數據是存儲在一起的。若主鍵id是亂序寫入的,InnoDB不得不做頁分裂操作時,至少會導致修改三個頁(分裂產生的兩個頁,以及他們的父節點頁面),而不是一個頁,這和MyISAM新增數據時添加到文件尾部很不一樣。所以使用InnoDB引擎盡可能的按主鍵順序插入數據。
InnoDB的二級索引和聚簇索引也不一樣。InnoDB二級索引的葉子節點中存儲的不是行數據的“偏移量”,而是主鍵值。這意味著通過二級索引查找行數據,存儲引擎需要找到二級索引的葉子節點獲得對應的主鍵值,然後根據這個值去聚簇索引中查找到對應的行數據。這裏做了重複的工作:兩次B-Tree查找,而不是一次。這樣的策略减少了當出現行移動或者數據頁分裂時二級索引的維護工作。二級索引的數據分布如下圖:
![InnoDB-和-MyISAM-的數據分布是什麼樣的?(1),web開發環境搭建_前端_06](https://s4.51cto.com/images/20210918/1631941070409266.jpg)
### 計算機網絡
* HTTP 緩存
* 你知道 302 狀態碼是什麼嘛?你平時瀏覽網頁的過程中遇到過哪些 302 的場景?
* HTTP 常用的請求方式,區別和用途?
* HTTPS 是什麼?具體流程
* 三次握手和四次揮手
* 你對 TCP 滑動窗口有了解嘛?
* WebSocket與Ajax的區別
* 了解 WebSocket 嘛?
* HTTP 如何實現長連接?在什麼時候會超時?
* TCP 如何保證有效傳輸及擁塞控制原理。
* TCP 協議怎麼保證可靠的,UDP 為什麼不可靠?
![InnoDB-和-MyISAM-的數據分布是什麼樣的?(1),web開發環境搭建_Web_07](https://s2.51cto.com/images/20210918/1631941071117135.jpg)
**[CodeChina開源項目:【大廠前端面試題解析+核心總結學習筆記+真實項目實戰+最新講解視頻】](https://ali1024.coding.net/public/P7/Web/git)**
### 算法
* 鏈錶
* 字符串
* 數組問題
* 二叉樹
* 排序算法
* 二分查找
* 動態規劃
* BFS
* 棧
* DFS
* 回溯算法
![InnoDB-和-MyISAM-的數據分布是什麼樣的?(1),web開發環境搭建_程序員_08](https://s2.51cto.com/images/20210918/1631941071863846.jpg)

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
版权声明:本文为[Java武器大師]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210918130226507h.html