請簡要說明 Mysql 中 MyISAM 和 InnoDB 引擎的區別

“請簡要說明 Mysql 中 MyISAM 和 InnoDB 引擎的區別”。
屏幕前有多少同學在面試過程與遇到過類似問題, 可以在評論區留言:遇到過。
考察目的
對于 xxxx 技術的區別,在面試中是很常見的一個問題
一般情況下,面試官會通過這類問題來熱場,打開接下來溝通的話題,
然后沿著你回答的內容層層遞進去做更深入的了解。
當然,另外一個更加深層次的原因,就是考察求職者對于這兩個技術的理解層次。
因為能夠通過自己的理解總結出他們的區別,至少說明你是有比較深入的研究的。
這個問題考察難度算是比較大的,一般面向 3 年以上開發經驗的同學。
問題解析
MyISAM 和 InnoDB 都是 Mysql 里面的兩個存儲引擎。
在 Mysql 里面,存儲引擎是可以自己擴展的,它的本質其實是定義數據存儲的方式
以及數據讀取的實現邏輯。 而不同存儲引擎本身的特性,使得我們可以針對性的選擇合適的引擎來實現不同的業務
場景。
從而獲得更好的性能。
在 Mysql 5.5 之前,默認的存儲引擎是 MyISAM,從 5.5 以后,InnoDB 就作為了默認
的存儲引擎。
在實際應用開發中,我們基本上都是采用 InnoDB 引擎。
我們先來看一下 MyISAM 引擎。
MyISAM 引擎的數據是通過二進制的方式存儲在磁盤上,它在磁盤上體現為兩個文件
? 一個是.MYD 文件,D 代表 Data,是 MyISAM 的數據文件,存放數據記錄,
? 一個是.MYI 文件,I 代表 Index,是 MyISAM 的索引文件,存放索引
實現機制如圖所示(如圖)。
因為索引和數據是分離的,所以在進行查找的時候,先從索引文件中找到數據的磁盤位
置,再到數據文件
中找到索引對應的數據內容。
在 InnoDB 存儲引擎中,數據同樣存儲在磁盤上,它在磁盤上只有一個 ibd 文件,里
面包含索引和數據。
(如圖),它的整體結構如圖所示,在 B+樹的葉子節點里面存儲了索引對應的數據,
在通過索引進行檢索的時候,命中葉子節點,就可以直接從葉子節點中取出行數據。
了解了這兩個存儲引擎以后,我們在面試的時候該怎么回答呢?
高手回答
好的。
基于我的理解,我認為 MyISAm 和 InnoDB 的區別有 4 個,
? 第一個,數據存儲的方式不同,MyISAM 中的數據和索引是分開存儲的,
而 InnoDB 是把索引和數據存儲在同一個文件里面。
? 第二個,對于事務的支持不同,MyISAM 不支持事務,而 InnoDB 支持 ACID 特性
的事務處理
? 第三個,對于鎖的支持不同,MyISAM 只支持表鎖,而 InnoDB 可以根據不同的
情況,支持行鎖,表鎖,間隙鎖,臨鍵鎖
? 第四個,MyISAM 不支持外鍵,InnoDB 支持外鍵
因此基于這些特性,我們在實際應用中,可以根據不同的場景來選擇合適的存儲引擎。
比如如果需要支持事務,那必須要選擇 InnoDB。
如果大部分的表操作都是查詢,可以選擇 MyISAM。
以上就是我的理解。
總結
下次面試的時候遇到這個問題,大家知道怎么回答了嗎?
如果你喜歡我的作品,記得點贊收藏加關注哦
本文摘自mic老師文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160801.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160801.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160801.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot監聽器解析

監聽器模式介紹 監聽器模式的要素 事件監聽器廣播器觸發機制 SpringBoot監聽器實現 系統事件 事件發送順序 監聽器注冊 監聽器注冊和初始化器注冊流程類似 監聽器觸發機制 獲取監聽器列表核心流程: 通用觸發條件: 自定義監聽器實現 實現方式1 實現監聽器接口: Order(1) …

[操作系統]進程和線程

目錄 1.什么是進程 1.1進程控制塊抽象 1.2 CPU 分配 —— 進程調度(Process Scheduling) 1.3內存分配 —— 內存管理(Memory Manage) 1.4進程間通信(Inter Process Communication) 2.線程 2.1概念 2.2為什么要有線程 2.3線…

論文閱讀 Forecasting at Scale (二)

最近在看時間序列的文章,回顧下經典 論文地址 項目地址 Forecasting at Scale 3.2、季節性 3.3、假日和活動事件3.4、模型擬合3.5、分析師參與的循環建模4、自動化預測評估4.1、使用基線預測4.2、建模預測準確性4.3、模擬歷史預測4.4、識別大的預測誤差 5、結論6、致…

【Python】重磅!這本30w人都在看的Python數據分析暢銷書更新了!

Python 語言極具吸引力。自從 1991 年誕生以來,Python 如今已經成為最受歡迎的解釋型編程語言。 【文末送書】今天推薦一本Python領域優質數據分析書籍,這本30w人都在看的書,值得入手。 目錄 作譯者簡介主要變動導讀視頻購書鏈接文末送書 pan…

【計算機方向】通信、算法、自動化、機器人、電子電氣、計算機工程、控制工程、計算機視覺~~~~~合集!!!

◆本文為大家梳理了近期可投的EI國際會議,涵蓋計算機各個學科方向,均可EI檢索 本期EI會議匯總合集涵蓋領域:計算機視覺、物聯網、算法、通信、智能技術、人工智能、人機交互、機器人、電子電氣等眾多領域! 本期所推薦的EI會議有…

ros2不同機器通訊時IP設置

看到這就是不同機器的IP地址,為了避免在路由器為不同的機器使用DHCP分配到上面的地址,可以設置DHCP分配的范圍:(我的路由器是如下設置的,一般路由器型號都不一樣,自己找一下) 防火墻設置-----&…

Leetcode—13.羅馬數字轉整數【簡單】

2023每日刷題(三十七) Leetcode—13.羅馬數字轉整數 算法思想 當前位置的元素比下個位置的元素小,就減去當前值,否則加上當前值 實現代碼 int getValue(char c) {switch(c) {case I:return 1;case V:return 5;case X:return 1…

elasticsearch 8安裝

問題提前報 max virtual memory areas error max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 如果您的環境是Linux,注意要做以下操作,否則es可能會啟動失敗 1 用編輯工具打開文件/etc/sysctl.conf 2 …

wpf使用CefSharp.OffScreen模擬網頁登錄,并獲取身份cookie

目錄 框架信息&#xff1a;MainWindow.xamlMainWindow.xaml.cs爬取邏輯模擬登錄攔截請求Cookie獲取 CookieVisitorHandle 框架信息&#xff1a; CefSharp.OffScreen.NETCore 119.1.20 MainWindow.xaml <Window x:Class"Wpf_CHZC_Img_Identy_ApiDataGet.MainWindow&qu…

selinux-policy-default(2:2.20231119-2)軟件包內容詳細介紹(2)

接前一篇文章&#xff1a;selinux-policy-default&#xff08;2:2.20231119-2&#xff09;軟件包內容詳細介紹&#xff08;1&#xff09; 4. 重點文件內容解析 &#xff08;1&#xff09;control/postist文件 文件內容如下&#xff1a; #!/bin/sh set -e# summary of how th…

22LLMSecEval數據集及其在評估大模型代碼安全中的應用:GPT3和Codex根據LLMSecEval的提示生成代碼和代碼補全,CodeQL進行安全評估

LLMSecEval: A Dataset of Natural Language Prompts for Security Evaluations 寫在最前面主要工作 課堂討論大模型和密碼方向&#xff08;沒做&#xff0c;只是一個idea&#xff09; 相關研究提示集目標NL提示的建立NL提示的建立流程 數據集數據集分析 存在的問題 寫在最前面…

力扣算法練習BM45—滑塊窗口的最大值

題目 給定一個長度為 n 的數組 num 和滑動窗口的大小 size &#xff0c;找出所有滑動窗口里數值的最大值。 例如&#xff0c;如果輸入數組{2,3,4,2,6,2,5,1}及滑動窗口的大小3&#xff0c;那么一共存在6個滑動窗口&#xff0c;他們的最大值分別為{4,4,6,6,6,5}&#xff1b; 針…

使用Python畫一棵樹

&#x1f38a;專欄【不單調的代碼】 &#x1f354;喜歡的詩句&#xff1a;更喜岷山千里雪 三軍過后盡開顏。 &#x1f386;音樂分享【如愿】 &#x1f970;歡迎并且感謝大家指出我的問題 文章目錄 &#x1f339;Turtle模塊&#x1f384;效果&#x1f33a;代碼&#x1f6f8;代碼…

【tomcat】java.lang.Exception: Socket bind failed: [730048

項目中一些舊工程運行情況處理 問題 1、啟動端口占用 2、打印編碼亂碼 ??&#xfffd;&#xfffd; 13, 2023 9:33:26 &#xfffd;&#xfffd;&#xfffd;&#xfffd; org.apache.coyote.AbstractProtocol init &#xfffd;&#xfffd;&#xfffd;&#xfffd;: Fa…

五毛QQ項目記

問題與挑戰&#xff1a;某公司為了實現某馬總造福全人類&#xff0c;紅旗插遍全球的宏偉目標&#xff0c;為應對后續用戶量激增的問題。特別安排了一次針對全體用戶的秒殺活動&#xff1a;于XXXX年XX月XX日XX時XX分XX秒開始的秒殺五毛錢一百個QQ幣的活動。每個賬戶僅限一次&…

oracle面試相關的,Oracle基本操作的SQL命令

文章目錄 數據庫-Oracle〇、Oracle用戶管理一、Oracle數據庫操作二、Oracle表操作1、創建表2、刪除表3、重命名表4、增加字段5、修改字段6、重名字段7、刪除字段8、添加主鍵9、刪除主鍵10、創建索引11、刪除索引12、創建視圖13、刪除視圖 三、Oracle操作數據1、數據查詢2、插入…

ubuntu 20.04如何切換gcc/g++/python的版本

ubuntu 20.04如何切換gcc/g/python的版本 1 安裝gcc/g/python2 設置gcc/g/python的備選項3 選擇當前系統要使用的gcc/g/python版本3.1 切換gcc/g/python版本3.2 切換示例 當系統同時存在gcc-9以及gcc-10時該如何切換讓當前的系統gcc版本指向gcc-9或是gcc-10呢&#xff1f;g也同…

Connect-The-Dots_2

Connect-The-Dots_2 一、主機發現和端口掃描 主機發現&#xff0c;靶機地址192.168.80.148 arp-scan -l端口掃描 nmap -A -p- -sV 192.168.80.148開放端口 21/tcp open ftp vsftpd 2.0.8 or later 80/tcp open http Apache httpd 2.4.38 ((Debian)) 111/tcp …

循環隊列詳解!!c 語言版本(兩種方法)雙向鏈表和數組法!!

目錄 1.什么是循環隊列 2.循環隊列的實現&#xff08;兩種方法&#xff09; 第一種方法 數組法 1.源代碼 2.源代碼詳解&#xff01;&#xff01; 1.創造隊列空間和struct變量 2.隊列判空 3.隊列判滿&#xff08;重點&#xff09; 4.隊列的元素插入 5.隊列的元素刪除 …