搜尋
首頁資料庫mysql教程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的差別是什麼

本教學操作環境: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)

【相關推薦:mysql影片教學

以上是mysql中MyISAM和InnoDB的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL的許可與其他數據庫系統相比如何?MySQL的許可與其他數據庫系統相比如何?Apr 25, 2025 am 12:26 AM

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

您什麼時候選擇InnoDB而不是Myisam,反之亦然?您什麼時候選擇InnoDB而不是Myisam,反之亦然?Apr 25, 2025 am 12:22 AM

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中解釋外鍵的目的。在MySQL中解釋外鍵的目的。Apr 25, 2025 am 12:17 AM

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

MySQL中有哪些不同類型的索引?MySQL中有哪些不同類型的索引?Apr 25, 2025 am 12:12 AM

MySQL中有四種主要的索引類型:B-Tree索引、哈希索引、全文索引和空間索引。 1.B-Tree索引適用於範圍查詢、排序和分組,適合在employees表的name列上創建。 2.哈希索引適用於等值查詢,適合在MEMORY存儲引擎的hash_table表的id列上創建。 3.全文索引用於文本搜索,適合在articles表的content列上創建。 4.空間索引用於地理空間查詢,適合在locations表的geom列上創建。

您如何在MySQL中創建索引?您如何在MySQL中創建索引?Apr 25, 2025 am 12:06 AM

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL與Sqlite有何不同?MySQL與Sqlite有何不同?Apr 24, 2025 am 12:12 AM

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是什麼?它們如何提高性能?MySQL中的索引是什麼?它們如何提高性能?Apr 24, 2025 am 12:09 AM

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

說明如何使用MySQL中的交易來確保數據一致性。說明如何使用MySQL中的交易來確保數據一致性。Apr 24, 2025 am 12:09 AM

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境