MySQL中常用的四種儲存引擎分別是: MyISAM儲存引擎、innoDB儲存引擎、MEMORY儲存引擎、ARCHIVE儲存引擎。本文將對這四種儲存引擎進行重點介紹,最後將這四種儲存引擎進行比較。
MySQL中的儲存引擎
#一、儲存引擎
1、儲存引擎其實就是對於資料庫檔案的一種存取機制,如何實現儲存數據,如何為儲存的資料建立索引以及如何更新,查詢資料等技術實現的方法。
2、MySQL中的資料用各種不同的技術儲存在檔案(或記憶體)中,這些技術中的每一種技術都使用不同的儲存機制,索引技巧,鎖定水平並且最終提供廣泛的不同功能和能力。在MySQL中將這些不同的技術及配套的相關功能稱為儲存引擎。
二、MySQL 中查看引擎
#1、show engines; // 查看mysql所支援的儲存引擎,以及從中得到mysql默認的儲存引擎。
2、show variables like '% storage_engine'; // 查看mysql 預設的儲存引擎
3、show create table tablename ; // 查看某一表所使用的儲存引擎,這個預設儲存引擎被修改了!
4、show table status from database where name="tablename" //精確查看某一資料表所使用的儲存引擎
#三、MySQL中常用的幾種儲存引擎:
MyISAM#儲存引擎:
存放的位置: MySQL如果使用MyISAM儲存引擎,資料庫檔案類型就包含.frm、.MYD、.MYI,預設存放位置是C:\Documentsand Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data
存放的方式: MyISAM 這種儲存引擎不支援事務,不支援行級鎖,只支援並發插入的表鎖,主要用於高負載的select。
索引的方式: MyISAM也是使用B tree索引但是和Innodb的在具體實作上有些不同。
此引擎基於ISAM資料庫引擎,除了提供ISAM裡所沒有的索引和欄位管理等大量功能,MyISAM還使用一種表格鎖定的機制來優化多個並發的讀寫操作,但需要經常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間,否則碎片也會隨之增加,最終影響資料存取效能。 MyISAM還有一些有用的擴展,例如用來修復資料庫檔案的MyISAMChk工具和用來恢復浪費空間的 MyISAMPack工具。 MyISAM強調了快速讀取操作,主要用於高負載的select,這可能也是MySQL深受Web開發的主要原因:在Web開發中進行的大量資料操作都是讀取操作,所以大多數虛擬主機供應商和Internet平台提供者(Internet Presence Provider,IPP)只允許使用MyISAM格式。
MyISAM類型的表格支援三種不同的儲存結構:靜態型、動態型、壓縮型。
靜態型:指定義的表格列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的資料類型),這樣MySQL就會自動使用靜態MyISAM格式。使用靜態格式的表的效能比較高,因為在維護和存取以預定格式儲存資料時需要的開銷很低;但這種高效能是以空間為代價換來的,因為在定義的時候是固定的,所以不管列中的值有多大,都會以最大值為準,佔據了整個空間。
動態型:如果列(即使只有一列)定義為動態的(xblob, xtext, varchar等資料類型),這時MyISAM就自動使用動態型,雖然動態型的表佔用了比靜態型表的空間,但帶來了性能的降低,因為如果某個字段的內容發生變化則其位置很可能需要移動,這樣就會導致碎片的產生,隨著數據變化的增多,碎片也隨之增加,數據存取效能會隨之降低。
對於因碎片增加而降低資料存取性這個問題,有兩個解決方案:
a、盡可能使用靜態資料型別;
b、table table_name 整理碎片的碎片表 整理碎片的碎片,語句經常使用的碎片來恢復碎片表由於表格資料的更新和刪除導致的空間遺失。如果儲存引擎不支援optimize table table_name則可以轉儲並 重新載入數據,這樣也可以減少碎片;
壓縮型:如果在資料庫中建立在整個生命週期中只讀的表,則應使用MyISAM的壓縮型表來減少空間的佔用。
優缺點:MyISAM的優點在於佔用空間小,處理速度快。缺點是不支援事務的完整性和並發性。
2. innoDB儲存引擎
儲存位置:MySQL如果使用InnoDB儲存引擎,資料庫檔案類型就包括.frm、ibdata1、.ibd,存放位置有兩個,.frm文件預設存放位置是C:\Documents and Settings\All Users\ApplicationData\MySQL\MySQL Server 5.1\data,ibdata1、.ibd檔案預設存放位置是MySQL安裝目錄下的data資料夾。
innodb儲存引擎的mysql表提供了事務,回滾以及系統崩潰修復能力和多版本迸發控制的事務的安全性。
innodb支援自增長列(auto_increment),自增長列的值不能為空,如果在使用的時候為空的話怎會進行自動存現有的值開始增值,如果有但是比現在的還大,則就儲存這個值。
innodb儲存引擎支援外鍵(foreign key) ,外鍵所在的表稱為子表而所依賴的表稱為父表。
innodb儲存引擎最重要的是支援事務,以及事務相關聯功能。
innodb儲存引擎支援mvcc的行級鎖定。
innodb儲存引擎索引使用的是B Tree
優缺點:InnoDB的優點在於提供了良好的事務處理、崩潰修復能力和並發控制。缺點是讀寫效率較差,佔用的資料空間相對較大。
3. MEMORY儲存引擎
memory儲存引擎相比前面的一些儲存引擎,有點不一樣,其使用儲存在內從中的資料來建立表,而且所有的資料也都儲存在記憶體中。
每個基於memory儲存引擎的表實際對應一個磁碟文件,該文件的文件名和表名是相同的,類型為.frm。該文件只儲存表格的結構,而其資料文件,都是儲存在記憶體中,這樣有利於對資料的快速處理,提高整個表的處理能力。
memory儲存引擎預設使用雜湊(HASH)索引,其速度比使用B- Tree型要快,如果讀者希望使用B樹型,則在建立的時候可以引用。
memory儲存引擎檔案資料都儲存在記憶體中,如果mysqld進程發生異常,重新啟動或關機這些資料都會消失。所以memory儲存引擎中的表的生命週期很短,通常只使用一次。
4. ARCHIVE儲存引擎
此儲存引擎非常適合儲存大量獨立的、作為歷史記錄的資料。區別於InnoDB和MyISAM這兩種引擎,ARCHIVE提供了壓縮功能,擁有高效的插入速度,但這種引擎不支援索引,所以查詢效能較差一些。
四.四種儲存引擎比較
InnoDB:支援交易處理,支援外鍵,支援崩潰修復能力和並發控制。如果需要對事務的完整性要求比較高(例如銀行),要求實現並發控制(例如售票),那麼選擇InnoDB有很大的優勢。如果需要頻繁的更新、刪除操作的資料庫,也可以選擇InnoDB,因為支援交易的提交(commit)和回溯(rollback)。
MyISAM:插入資料快,空間和記憶體使用比較低。如果表格主要用於插入新記錄和讀出記錄,那麼選擇MyISAM能實現處理高效率。如果應用的完整性、並發性要求比 較低,也可以使用。如果資料表主要用來插入和查詢記錄,則MyISAM引擎能提供較高的處理效率
MEMORY:所有的資料都在記憶體中,資料的處理速度快,但安全性不高。如果需要很快的讀寫速度,對資料的安全性要求較低,可以選擇MEMOEY。它對錶的大小有要求,不能建立太大的表。所以,這類資料庫只使用在相對較小的資料庫表。如果只是暫時存放數據,資料量不大,且不需要較高的資料安全性,可以選擇將資料保存在記憶體中的Memory引擎,MySQL中使用該引擎作為臨時表,存放查詢的中間結果
如果只有INSERT和SELECT操作,可以選擇Archive,Archive支援高並發的插入操作,但本身不是事務安全的。 Archive非常適合儲存歸檔數據,如記錄日誌資訊可以使用Archiv
注意,同一個資料庫也可以使用多種儲存引擎的表。如果一個表格要求比較高的事務處理,可以選擇InnoDB。這個資料庫中可以將查詢要求比較高的表選擇MyISAM儲存。如果該資料庫需要一個用於查詢的臨時表,可以選擇MEMORY儲存引擎。
相關文章:
相關影片:
以上是MySQL中常用儲存引擎有哪些?它們相互之間有什麼差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!