溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別是什么

發(fā)布時(shí)間:2023-04-28 10:51:17 來(lái)源:億速云 閱讀:111 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別是什么”吧!

    前言

    MyISAM和InnoDB是使用MySQL最常用的兩種存儲(chǔ)引擎,在5.5版本之前默認(rèn)采用MyISAM存儲(chǔ)引擎,從5.5開始采用InnoDB存儲(chǔ)引擎。

    MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別是什么

    存儲(chǔ)引擎

    存儲(chǔ)引擎是:數(shù)據(jù)庫(kù)管理系統(tǒng)如何存儲(chǔ)數(shù)據(jù)、如何為存儲(chǔ)的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方法。

    MySQL的核心就是插件式存儲(chǔ)引擎,支持多種存儲(chǔ)引擎。

    show engines; //查看存儲(chǔ)引擎

    MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別是什么

    MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別是什么

    關(guān)于數(shù)據(jù)庫(kù)的大致架構(gòu)和基礎(chǔ)操作,這里不過(guò)多介紹;

    區(qū)別

    說(shuō)區(qū)別之前說(shuō)一下他倆的索引底層都是BTREE+ , B+樹的數(shù)據(jù)結(jié)構(gòu)維護(hù)索引和數(shù)據(jù)(m是非聚簇索引,i是聚簇索引,這點(diǎn)注意下)

    事務(wù)

    • InnoDB支持事務(wù),具有安全性和完整性,系統(tǒng)容災(zāi)性強(qiáng),且通過(guò)使用多版本并發(fā)控制MVCC來(lái)獲得高并發(fā)性; 

    • MyISAM不支持事務(wù); 系統(tǒng)容災(zāi)性弱;

    外鍵

    • InnoDB支持外鍵

    • MyISAM不支持外鍵

    因此把一個(gè)有外鍵的InnoDB表單轉(zhuǎn)換成MyISAM表單會(huì)失敗;

    表單的存儲(chǔ)

    通過(guò)使用不同存儲(chǔ)引擎建立表單查看生成的對(duì)應(yīng)存儲(chǔ)文件,發(fā)現(xiàn)除了雙方共有的 .frm存儲(chǔ)表屬性外:

    • InnoDB存儲(chǔ)引擎表單獨(dú)存放到一個(gè)獨(dú)立的IBD文件中;(索引和數(shù)據(jù)放在了一起)–>聚簇索引–>通過(guò)主鍵索引效率高; 普通鍵進(jìn)行索引可能需要回表;

    • MyISAM存儲(chǔ)引擎表單MYDMYI兩部分組成,其中MYD(MYData)用來(lái)存放數(shù)據(jù)文件,而MYI(MYIndex)則用來(lái)存放索引文件–>非聚簇索引–>數(shù)據(jù)存放的是指針,不需要回表,主鍵索引和普通鍵索引分開了;

    數(shù)據(jù)查詢效率

    • InnoDB不支持全文索引,而 MyISAM 支持全文索引,查詢效率上 MyISAM更高;

    • InnoDB不保存表的具體行數(shù),執(zhí)行 select count(*) from table 時(shí)需要全表掃描。而 MyISAM 用一個(gè)變量保存了整個(gè)表的行數(shù),執(zhí)行上述語(yǔ)句時(shí)只需要讀出該變量即可,速度很快;

    數(shù)據(jù)更新效率

    InnoDB的內(nèi)部?jī)?yōu)化,包括**磁盤預(yù)讀(**從磁盤讀取數(shù)據(jù)時(shí)采用可預(yù)測(cè)性讀取),自適應(yīng)哈希(自動(dòng)在內(nèi)存中創(chuàng)建hash索引以加速讀操作)等, 且能夠加速插入操作的插入緩沖區(qū)。所以比MyISAM在數(shù)據(jù)更新能力上更優(yōu);

    如何選擇

    1. 看設(shè)計(jì)的業(yè)務(wù)是否需要支持事務(wù),需要–InnoDB;不需要–MyISAM;

    2. 如果select讀操作頻繁,用MyISAM; 如果數(shù)據(jù)更新操作使用頻繁操作用InnoDB;

    3. 考慮系統(tǒng)容災(zāi)能力,MyISAM更不容易恢復(fù),InnoDB容易恢復(fù);

    既然MySQL5.5版本之后默認(rèn)了InnoDB,不知道用什么那就InnoDB,跟著主流走不會(huì)錯(cuò)。

    到此,相信大家對(duì)“MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI