站長資訊網
        最全最豐富的資訊網站

        mysql中MyISAM和InnoDB的區別是什么

        區別:1、InnoDB支持事務,MyISAM不支持;2、InnoDB支持外鍵,而MyISAM不支持;3、InnoDB是聚集索引,而MyISAM是非聚集索引;4、Innodb不支持全文索引,而MyISAM支持全文索引;5、InnoDB支持表、行級鎖,而MyISAM支持表級鎖;6、InnoDB表必須有唯一索引,而Myisam可以沒有;7、存儲文件不同。

        mysql中MyISAM和InnoDB的區別是什么

        程序員必備接口測試調試工具:立即使用
        Apipost = Postman + Swagger + Mock + Jmeter
        Api設計、調試、文檔、自動化測試工具
        后端、前端、測試,同時在線協作,內容實時同步

        本教程操作環境:windows7系統、mysql8版本、Dell G3電腦。

        InnoDB:MySQL默認的事務型引擎,也是最重要和使用最廣泛的存儲引擎。它被設計成為大量的短期事務,短期事務大部分情況下是正常提交的,很少被回滾。InnoDB的性能與自動崩潰恢復的特性,使得它在非事務存儲需求中也很流行。除非有非常特別的原因需要使用其他的存儲引擎,否則應該優先考慮InnoDB引擎。

        MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默認引擎。MyISAM提供的大量的特性,包括全文索引、壓縮、空間函數(GIS)等,但MyISAM并不支持事務以及行級鎖,而且一個毫無疑問的缺陷是崩潰后無法安全恢復。

        mysql中MyISAM和InnoDB的區別:

        1. InnoDB支持事務,MyISAM不支持,對于InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務;

        2. InnoDB支持外鍵,而MyISAM不支持。對一個包含外鍵的InnoDB表轉為MYISAM會失敗;

        3. InnoDB是聚集索引,使用B+Tree作為索引結構,數據文件是和(主鍵)索引綁在一起的(表數據文件本身就是按B+Tree組織的一個索引結構),必須要有主鍵,通過主鍵索引效率很高。但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過主鍵查詢到數據。因此,主鍵不應該過大,因為主鍵太大,其他索引也都會很大。

        MyISAM是非聚集索引,也是使用B+Tree作為索引結構,索引和數據文件是分離的,索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。

        也就是說:InnoDB的B+樹主鍵索引的葉子節點就是數據文件,輔助索引的葉子節點是主鍵的值;而MyISAM的B+樹主鍵索引和輔助索引的葉子節點都是數據文件的地址指針。

        mysql中MyISAM和InnoDB的區別是什么

        mysql中MyISAM和InnoDB的區別是什么

        4. InnoDB不保存表的具體行數,執行select count(*) from table時需要全表掃描。而MyISAM用一個變量保存了整個表的行數,執行上述語句時只需要讀出該變量即可,速度很快(注意不能加有任何WHERE條件);

        那么為什么InnoDB沒有了這個變量呢?

        因為InnoDB的事務特性,在同一時刻表中的行數對于不同的事務而言是不一樣的,因此count統計會計算對于當前事務而言可以統計到的行數,而不是將總行數儲存起來方便快速查詢。InnoDB會嘗試遍歷一個盡可能小的索引除非優化器提示使用別的索引。如果二級索引不存在,InnoDB還會嘗試去遍歷其他聚簇索引。
        如果索引并沒有完全處于InnoDB維護的緩沖區(Buffer Pool)中,count操作會比較費時。可以建立一個記錄總行數的表并讓你的程序在INSERT/DELETE時更新對應的數據。和上面提到的問題一樣,如果此時存在多個事務的話這種方案也不太好用。如果得到大致的行數值已經足夠滿足需求可以嘗試SHOW TABLE STATUS

        5. Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引領域的查詢效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了

        6. MyISAM表格可以被壓縮后進行查詢操作

        7. InnoDB支持表、行(默認)級鎖,而MyISAM支持表級鎖

        InnoDB的行鎖是實現在索引上的,而不是鎖在物理行記錄上。潛臺詞是,如果訪問沒有命中索引,也無法使用行鎖,將要退化為表鎖。

        例如:

        t_user(uid, uname, age, sex) innodb;       uid PK     無其他索引     update t_user set age=10 where uid=1;             命中索引,行鎖。       update t_user set age=10 where uid != 1;           未命中索引,表鎖。       update t_user set age=10 where name='chackca';    無索引,表鎖。
        登錄后復制

        8、InnoDB表必須有唯一索引(如主鍵)(用戶沒有指定的話會自己找/生產一個隱藏列Row_id來充當默認主鍵),而Myisam可以沒有

        9、Innodb存儲文件有frm、ibd,而Myisam是frm、MYD、MYI

        Innodb:frm是表定義文件,ibd是數據文件

        Myisam:frm是表定義文件,myd是數據文件,myi是索引文件

        如何選擇:

        1. 是否要支持事務,如果要請選擇innodb,如果不需要可以考慮MyISAM;

        2. 如果表中絕大多數都只是讀查詢,可以考慮MyISAM,如果既有讀也有寫,請使用InnoDB。

        3. 系統奔潰后,MyISAM恢復起來更困難,能否接受;

        4. MySQL5.5版本開始Innodb已經成為Mysql的默認引擎(之前是MyISAM),說明其優勢是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不會差。

        InnoDB為什么推薦使用自增ID作為主鍵?

        答:自增ID可以保證每次插入時B+索引是從右邊擴展的,可以避免B+樹和頻繁合并和分裂(對比使用UUID)。如果使用字符串主鍵和隨機主鍵,會使得數據隨機插入,效率比較差。

        innodb引擎的4大特性

        插入緩沖(insert buffer),二次寫(double write),自適應哈希索引(ahi),預讀(read ahead)

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 四虎影院国产精品| 久久99精品国产自在现线小黄鸭| 久久人搡人人玩人妻精品首页| 精品一区二区三区免费毛片爱| 精品久久久久久99人妻| 国产精品一久久香蕉产线看| 亚洲精品无码av人在线观看| 国亚洲欧美日韩精品| 麻豆精品久久久一区二区| 久久精品无码专区免费青青| 老司机精品影院91| 国产成人高清精品一区二区三区 | 完整观看高清秒播国内外精品资源| 久久久久免费精品国产| 成人午夜视频精品一区| 国内精品久久久人妻中文字幕| 中文精品无码中文字幕无码专区| 久久久久99精品成人片牛牛影视| 国产精品伦理久久久久久| 亚洲精品欧美综合| 91大神精品全国在线观看| 久久免费精品视频| 91精品国产综合久久香蕉| 亚洲精品私拍国产福利在线| 日本精品一区二区三区在线观看 | 国产小视频国产精品| 2018国产精华国产精品| 国产成人亚洲精品青草天美 | 久久99精品九九九久久婷婷| 国内精品久久久久国产盗摄| 国产精品自产拍高潮在线观看| 国产精品九九九| 精品国产一区二区三区2021| 精品日韩欧美国产| 久久久久久无码国产精品中文字幕 | 国产99久久九九精品无码| 欧美精品黑人巨大在线播放| 久久青草国产精品一区| 2020最新久久久视精品爱| 国产福利精品在线观看| 国产色精品vr一区区三区|