最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL MyISAM 與InnoDB 的區(qū)別

 更新時間:2020年09月24日 14:12:01   作者:Achilles_Heel  
這篇文章主要介紹了MySQL MyISAM與InnoDB 的區(qū)別,幫助大家更好的理解和使用MySQL的存儲引擎,感興趣的朋友可以了解下

區(qū)別:

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

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

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

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

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

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

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

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

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

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

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

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

8、InnoDB表必須有主鍵(用戶沒有指定的話會自己找或生產一個主鍵),而Myisam可以沒有

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

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

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

如何選擇:

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

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

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

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

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

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

innodb引擎的4大特性

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

以上就是MySQL MyISAM與InnoDB 的區(qū)別的詳細內容,更多關于MySQL MyISAM與InnoDB 的資料請關注腳本之家其它相關文章!

相關文章

  • MySQL無GROUP BY直接HAVING返回空的問題分析

    MySQL無GROUP BY直接HAVING返回空的問題分析

    這篇文章主要介紹了MySQL無GROUP BY直接HAVING返回空的問題分析,學習MYSQL需要注意這個問題
    2013-11-11
  • mysql中inner join和left join使用詳解

    mysql中inner join和left join使用詳解

    本文主要介紹了mysql中inner join和left join使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 淺談MySQL數據庫的備份與恢復

    淺談MySQL數據庫的備份與恢復

    MYSQL數據庫的備份、恢復等是每一位信息管理人員應必備的能力,因此掌握MYSQL數據庫管理的技巧會使您的工作事半功倍,這里我們來簡單總結下。
    2017-01-01
  • MySQL占用CPU過高,排查原因及解決方案

    MySQL占用CPU過高,排查原因及解決方案

    這篇文章主要介紹了MySQL占用CPU過高,排查原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • MySQL實現批量檢查表并進行repair與optimize的方法

    MySQL實現批量檢查表并進行repair與optimize的方法

    這篇文章主要介紹了MySQL實現批量檢查表并進行repair與optimize的方法,結合實例形式分析了MySQL批量修復與優(yōu)化表的相關技巧,需要的朋友可以參考下
    2016-04-04
  • MySQL union 語法代碼示例分析

    MySQL union 語法代碼示例分析

    主要介紹的是MySQLunion 語法代碼演示,我前兩天在相關網站看見MySQLunion 語法代碼演示的資料,覺得挺好,就拿出來供大家分享。希望在你今后的學習中會對你有所幫助。
    2010-06-06
  • IDEA使用mybatis-generator及配上mysql8.0.3版本遇到的bug

    IDEA使用mybatis-generator及配上mysql8.0.3版本遇到的bug

    這篇文章主要介紹了IDEA使用mybatis-generator以及配上mysql8.0.3版本遇到的問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • MySQL的左連接、右連接、內連接用法解讀

    MySQL的左連接、右連接、內連接用法解讀

    這篇文章主要介紹了MySQL的左連接、右連接、內連接用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • mysql-5.7.42升級到mysql-8.2.0(二進制方式)

    mysql-5.7.42升級到mysql-8.2.0(二進制方式)

    隨著數據量的增長和業(yè)務需求的變更,我們可能需要升級MySQL,本文主要介紹了mysql-5.7.42升級到mysql-8.2.0(二進制方式),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Mysql更換MyISAM存儲引擎為Innodb的操作記錄總結

    Mysql更換MyISAM存儲引擎為Innodb的操作記錄總結

    下面小編就為大家?guī)硪黄狹ysql更換MyISAM存儲引擎為Innodb的操作記錄總結。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論

夹江县| 黔江区| 远安县| 镶黄旗| 宣威市| 顺义区| 金昌市| 武邑县| 盘山县| 东平县| 大邑县| 丹阳市| 高清| 潮安县| 柘城县| 洛扎县| 遂川县| 精河县| 双鸭山市| 时尚| 张家界市| 桑日县| 临洮县| 青河县| 渭源县| 武山县| 固镇县| 唐河县| 乌兰察布市| 衡水市| 长武县| 六枝特区| 城固县| 黄陵县| 长汀县| 咸丰县| 井研县| 商都县| 尼木县| 云和县| 北辰区|