1. 程式人生 > >MySQL資料庫引擎ISAM MyISAM HEAP InnoDB的區別

MySQL資料庫引擎ISAM MyISAM HEAP InnoDB的區別

        MySQL資料庫引擎取決於MySQL在安裝的時候是如何被編譯的。要新增一個新的引擎,就必須重新編譯MYSQL。在預設情況下,MYSQL支援三個引擎:ISAM、MYISAM和HEAP。另外兩種型別INNODB和BERKLEY(BDB),也常常可以使用。如果技術高超,還可以使用MySQL++ API自己做一個引擎。

        ISAM:ISAM是一個定義明確且歷經時間考驗的資料表格管理方法,它在設計之時就考慮到 資料庫被查詢的次數要遠大於更新的次數。因此,ISAM執行讀取操作的速度很快,而且不佔用大量的記憶體和儲存資源。ISAM的兩個主要不足之處在於,它不 支援事務處理,也不能夠容錯:如果你的硬碟崩潰了,那麼資料檔案就無法恢復了。如果你正在把ISAM用在關鍵任務應用程式裡,那就必須經常備份你所有的實 時資料,通過其複製特性,MYSQL能夠支援這樣的備份應用程式。

        MyISAM:MyISAM是MySQL的ISAM擴充套件格式和預設的資料庫引擎。除了提供ISAM裡所沒有的索引和欄位管理的大量功能,MyISAM還使用一種表格鎖定的機制,來優化多個併發的讀寫操作,其代價是你需要經常執行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間。MyISAM還有一些有用的擴充套件,例如用來修復資料庫檔案的MyISAMCHK工具和用來恢復浪費空間的 MyISAMPACK工具。MYISAM強調了快速讀取操作,這可能就是為什麼MySQL受到了WEB開發如此青睞的主要原因:在WEB開發中你所進行的大量資料操作都是讀取操作。所以,大多數虛擬主機提供商和INTERNET平臺提供商只允許使用MYISAM格式。MyISAM格式的一個重要缺陷就是不能在表損壞後恢復資料。

        HEAP:HEAP允許只駐留在記憶體裡的臨時表格。駐留在記憶體裡讓HEAP要比ISAM和MYISAM都快,但是它所管理的資料是不穩定的,而且如果在關機之前沒有進行儲存,那麼所有的資料都會丟失。在資料行被刪除的時候,HEAP也不會浪費大量的空間。HEAP表格在你需要使用SELECT表示式來選擇和操控資料的時候非常有用。要記住,在用完表格之後就刪除表格。

        InnoDB:InnoDB資料庫引擎都是造就MySQL靈活性的技術的直接產品,這項技術就是MYSQL++ API。在使用MYSQL的時候,你所面對的每一個挑戰幾乎都源於ISAM和MyISAM資料庫引擎不支援事務處理(transaction process)也不支援外來鍵。儘管要比ISAM和 MyISAM引擎慢很多,但是InnoDB包括了對事務處理和外來鍵的支援,這兩點都是前兩個引擎所沒有的。如前所述,如果你的設計需要這些特性中的一者 或者兩者,那你就要被迫使用後兩個引擎中的一個了。

        MySQL官方對InnoDB是這樣解釋的:InnoDB給MySQL提供了具有提交、回滾和崩潰恢復能力的事務安全(ACID相容)儲存引擎。InnoDB鎖定在行級並且也在SELECT語句提供一個Oracle風格一致的非鎖定讀,這些特色增加了多使用者部署和效能。沒有在InnoDB中擴大鎖定的需要,因為在InnoDB中行級鎖定適合非常小的空間。InnoDB也支援FOREIGN KEY強制。在SQL查詢中,你可以自由地將InnoDB型別的表與其它MySQL的表的型別混合起來,甚至在同一個查詢中也可以混合。

InnoDB是為處理巨大資料量時的最大效能設計,它的CPU效率可能是任何其它基於磁碟的關係資料庫引擎所不能匹敵的。

        InnoDB儲存引擎被完全與MySQL伺服器整合,InnoDB儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。InnoDB儲存它的表&索引在一個表空間中,表空間可以包含數個檔案(或原始磁碟分割槽)。這與MyISAM表不同,比如在MyISAM表中每個表被存在分離的檔案中。InnoDB 表可以是任何尺寸,即使在檔案尺寸被限制為2GB的作業系統上。

        InnoDB預設地被包含在MySQL二進位制分發中。Windows Essentials installer使InnoDB成為Windows上MySQL的預設表。

        InnoDB被用來在眾多需要高效能的大型資料庫站點上產生。著名的Internet新聞站點Slashdot.org執行在InnoDB上。 Mytrix, Inc.在InnoDB上儲存超過1TB的資料,還有一些其它站點在InnoDB上處理平均每秒800次插入/更新的。

        MyISAM適用場景
                (1)做很多count 的計算;
                (2)插入不頻繁,查詢非常頻繁;
                (3)沒有事務。
        InnoDB適用場景
                (1)可靠性要求比較高,或者要求事務;
                (2)表更新和查詢都相當的頻繁,並且表鎖定的機會比較大的情況。

        一般情況下,MySQL會預設提供多種儲存引擎,可以通過下面的檢視:

                (1)看你的MySQL現在已提供什麼儲存引擎: mysql> show engines;

                (2)看你的MySQL當前預設的儲存引擎: mysql> show variables like '%storage_engine%';

                (3)你要看某個表用了什麼引擎(在顯示結果裡引數engine後面的就表示該表當前用的儲存引擎): mysql> show create table 表名;


        所有的效能測試在:Micrisoft window xp sp2 , Intel(R) Pentinum(R) M processor 1.6oGHz 1G 記憶體的電腦上測試。

        測試方法:連續提交10個query, 表記錄總數:38萬 , 時間單位 (s)

引擎型別 MyISAM                InnoDB             

效能相差

count                      0.0008357 3.0163 3609
查詢主鍵 0.005708 0.1574 27.57
查詢非主鍵 24.01 80.37 3.348
更新主鍵 0.008124 0.8183 100.7
更新非主鍵 0.004141 0.02625 6.338
插入 0.004188 0.3694 88.21

        (1)加了索引以後,對於MyISAM查詢可以加快:4 206.09733倍,對InnoDB查詢加快510.72921倍,同時對MyISAM更新速度減慢為原來的1/2,InnoDB的更新速度減慢為原來的1/30。要看情況決定是否要加索引,比如不查詢的log表,不要做任何的索引。

        (2)如果你的資料量是百萬級別的,並且沒有任何的事務處理,那麼用MyISAM是效能最好的選擇。

        (3)InnoDB表的大小更加的大,用MyISAM可省很多的硬碟空間。

        在我們測試的這個38w的表中,表佔用空間的情況如下:

引擎型別 MyISAM InnoDB
資料 53,924 KB 58,976 KB
索引 13,640 KB 21,072 KB
佔用總空間 67,564 KB 80,048 KB

        另外一個176W萬記錄的表, 表佔用空間的情況如下:

引擎型別 MyIsam InnorDB
資料 56,166 KB 90,736 KB
索引 67,103 KB 88,848 KB
佔用總空間 123,269 KB 179,584 KB

相關推薦

MySQL資料庫引擎ISAM MyISAM HEAP InnoDB區別

        MySQL資料庫引擎取決於MySQL在安裝的時候是如何被編譯的。要新增一個新的引擎,就必須重新編譯MYSQL。在預設情況下,MYSQL支援三個引擎:ISAM、MYISAM和HEAP。另外兩種型別INNODB和BERKLEY(BDB),也常常可以使用。如果技

MySQL儲存引擎MyISAMInnoDB區別詳解

1、MyISAM和InnoDB區別 1.1 區別   InnoDB MyISAM 構造 由.frm檔案、表空間(分為獨立表空間或者共享表空間)和日誌檔案(redo log)組成。 MyIS

MySQL資料庫知識點之MyIsamInnoDB引擎區別

MyIsam與InnoDB引擎的區別 MyIsam與InnoDB主要有以下4點大的區別: 快取機制 事務支援 鎖實現 資料物理儲存方式(包括索引和資料) 1 快取機制 MyIsam InnoDB MyIsam僅僅快取索引,不會

MySQL儲存引擎簡介-MyISAMInnoDB區別

上篇文章《MySql邏輯結構簡介》我們聊到了儲存引擎,可以說MySQL可插拔的多元化儲存引擎給我們的使用者帶來了很靈活的選擇。 這篇文章我們來聊一下目前主流的兩種儲存引擎MyISAM和InnoDB的區別。   MyISAM InnoDB 外來鍵 不支援 支援 事務 不支援 支援 鎖

MySQL儲存引擎MyISAMInnoDB區別

### MyISAM和InnoDB的區別 #### 定義 **InnoDB**:MySQL預設的事務型引擎,也是最重要和使用最廣泛的儲存引擎。它被設計成為大量的短期事務,短期事務大部分情況下是正常提交的,很少被回滾。InnoDB的效能與自動崩潰恢復的特性,使得它在非事務儲存需求中也很流行。除非有非常特別的

MySQL儲存引擎簡述 - MyISAMInnoDB的優劣

一、MyISAM 與 InnoDB 的異同 特點 MyISAM InnoDB 儲存限制 有 64TB 事務安全   支援 鎖機制 表鎖 行

Mysql引擎型別MyISAMInnoDB介紹及變更

3、InnoDB不支援FULLTEXT型別的索引。 4、InnoDB 中不儲存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出儲存好的行數即可。注意的是,當count(*)語句包含 where條

MySQL存儲引擎中的MyISAMInnoDB區別詳解

訪問 過程 包含 lte 處理機制 comm 用戶 isam log MyISAM是MySQL的默認數據庫引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的順序訪問方法)所改良。雖然性能極佳,但卻有一個缺點:不

MYSQL數據庫引擎 MYISAMINNODB區別

dex sele select date insert 崩潰 sql數據庫 ransac commit 1、 存儲結構 MyISAM:每個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。.frm文件存儲表定義。數據文件的擴展名為.M

MySQL存儲引擎--MyISAMInnoDB區別

多應用 基本 binlog sele detail bin insert details text MyISAM 和InnoDB 講解   InnoDB和MyISAM是許多人在使用MySQL時最常用的兩個表類型,這兩個表類型各有優劣,視具體應用而定。基本的差別為:MyISA

MySQL儲存引擎中的MyISAMInnoDB區別詳解

在使用MySQL的過程中對MyISAM和InnoDB這兩個概念存在了些疑問,到底兩者引擎有何分別一直是存在我心中的疑問。為了解開這個謎題,搜尋了網路,找到了如下資訊: MyISAM是MySQL的預設資料庫引擎(5.5版之前),由早期的ISAM(Indexed Sequent

MySql資料庫儲存引擎MyISAMInnoDB

  MySql可以將資料以不同的技術儲存在檔案(記憶體)中,這種技術就稱為儲存引擎。而每一種儲存引擎也使用不同的儲存機制、索引技巧、鎖定水平,最終提供廣泛且不同的功能。常見的儲存引擎有MyISAM,InnoDB,Memory,Archive等。   本文主要介

mysql資料庫引擎切換(InnoDB,MyISAM

mysql更改引擎(InnoDB,MyISAM)的方法,分享給大家供大家參考。具體實現方法如下: mysql預設的資料庫引擎是MyISAM,不支援事務和外來鍵,也可使用支援事務和外來鍵的InnoDB。 檢視當前資料庫的所支援的資料庫引擎以及預設資料庫引擎 資料庫支援

MySQL儲存引擎--MyISAMInnoDB區別

MyISAM 和InnoDB 講解   InnoDB和MyISAM是許多人在使用MySQL時最常用的兩個表型別,這兩個表型別各有優劣,視具體應用而定。基本的差別為:MyISAM型別不支援事務處理等高階處理,而InnoDB型別支援。MyISAM型別的表強調的是效能,其執行數度

MySQL資料庫引擎MyISAMInnoDB的比較

MySql資料庫引擎比較多,如:MyISAM、InnoDB、MERGE、BDB、MEMORY、EXAMPLE等,但最常用的還是MyISAM和InnoDB資料庫引擎。下面我們就來說說兩種引擎之間的區別:

Mysql資料庫引擎-------> MYISAMINNODB詳解

一、資料庫引擎   資料庫引擎是用於儲存、處理和保護資料的核心服務。利用資料庫引擎可控制訪問許可權並快速處理事務,從而滿足企業內大多數需要處理大量資料的應用程式的要求。 使用資料庫引擎建立用於聯機事務處理或聯機分析處理資料的關係資料庫。這包括建立用於儲存資料的表和用於檢視

mysql資料庫引擎MyISAMInnoDB的比較和使用場合

資料庫中資料管理的一種方式,MySQL支援插入式的儲存引擎,也就是說你同一資料庫中的資料表可以選擇不同儲存引擎 檢視mysql版本 mysql> select version(); +-----------+ | version() | +-----------+

MySQLMyISAMInnoDB區別及選擇,mysql添加外鍵

title 必須 pan 就會 默認 簡化 平臺 兩種 myisam InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面

MySQL數據庫MyISAMInnoDB存儲引擎的對比

MyISAM InnoDB MyISAM ① 不支持事務(事務是指邏輯上的一組操作,組成這組操作的各個單元,要麽全部成功要麽全部失敗)。 ② 表級鎖定(更新時鎖整個表) ③ 讀寫互相阻塞:不僅會在寫入的時候阻塞讀取,MyISAM還會在讀取的時候阻塞寫入,但讀本身不會阻塞另外的讀。 ④

MySQL存儲引擎MyisamInnodb總結性梳理

影響 並發 定義 重新 表鎖 category lac RKE 5.5 Mysql有兩種存儲引擎:InnoDB與Myisam,下表是兩種引擎的簡單對比 MyISAM InnoDB 構成上的區別: 每個MyISAM在磁盤上存儲成三個文件。第一個 文件