MySQL存儲引擎InnoDB與Myisam的區(qū)別分析
MySQL有多種存儲引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。比較常用的是 MyISAM 和 InnoBD。在MySQL 5.1之前的版本中,默認(rèn)的搜索引擎是MyISAM,從MySQL 5.5之后的版本中,默認(rèn)的搜索引擎變更為InnoDB。
兩者的優(yōu)劣可謂是各有千秋。INNODB會支持一些關(guān)系數(shù)據(jù)庫的高級功能,如事務(wù)功能和行級鎖,MYISAM不支持。MYISAM的性能更優(yōu),占用的存儲空間少。所以,選擇何種存儲引擎,視具體應(yīng)用而定。
MyISAM介紹
每個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。.frm文件存儲表定義。數(shù)據(jù)文件的擴展名為.MYD (MYData)。
MyISAM表格可以被壓縮,而且它們支持全文搜索。不支持事務(wù),而且也不支持外鍵。如果事物回滾將造成不完全回滾,不具有原子性。在進(jìn)行updata時進(jìn)行表鎖,并發(fā)量相對較小。如果執(zhí)行大量的SELECT,MyISAM是更好的選擇。
MyISAM緩存在內(nèi)存的是索引,不是數(shù)據(jù)。而InnoDB緩存在內(nèi)存的是數(shù)據(jù),相對來說,服務(wù)器內(nèi)存越大,InnoDB發(fā)揮的優(yōu)勢越大。
優(yōu)點:查詢數(shù)據(jù)相對較快,適合大量的select,可以全文索引。
缺點:不支持事務(wù),不支持外鍵,并發(fā)量較小,不適合大量update
InnoDB介紹
這種類型是事務(wù)安全的。.它與BDB類型具有相同的特性,它們還支持外鍵。InnoDB表格速度很快。具有比BDB還豐富的特性,因此如果需要一個事務(wù)安全的存儲引擎,建議使用它。在update時表進(jìn)行行鎖,并發(fā)量相對較大。如果你的數(shù)據(jù)執(zhí)行大量的INSERT或UPDATE,出于性能方面的考慮,應(yīng)該使用InnoDB表。
優(yōu)點:支持事務(wù),支持外鍵,并發(fā)量較大,適合大量update
缺點:查詢數(shù)據(jù)相對較快,不適合大量的select
MySQL 存儲引擎 MyISAM 與 InnoDB 如何選擇?
下面我們分別來看兩種存儲引擎的區(qū)別。
- 一、InnoDB支持事務(wù),MyISAM不支持,這一點是非常之重要。事務(wù)是一種高級的處理方式,如在一些列增刪改中只要哪個出錯還可以回滾還原,而MyISAM就不可以了。
- 二、MyISAM適合查詢以及插入為主的應(yīng)用,InnoDB適合頻繁修改以及涉及到安全性較高的應(yīng)用
- 三、InnoDB支持外鍵,MyISAM不支持
- 四、MySQL 在 5.1 之前版本默認(rèn)存儲引擎是 MyISAM,5.1 之后版本默認(rèn)存儲引擎是 InnoDB
- 五、InnoDB不支持FULLTEXT類型的索引
- 六、InnoDB中不保存表的行數(shù),如select count(*) from table時,InnoDB需要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語句包含where條件時MyISAM也需要掃描整個表
- 七、對于自增長的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中可以和其他字段一起建立聯(lián)合索引
- 八、清空整個表時,InnoDB是一行一行的刪除,效率非常慢。MyISAM則會重建表
- 九、InnoDB支持行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like '%lee%'
通過以上九點區(qū)別,結(jié)合個人博客的特點,推薦個人博客系統(tǒng)使用MyISAM,因為在博客里主要操作是讀取和寫入,很少有鏈?zhǔn)讲僮?。所以選擇MyISAM引擎使你博客打開也頁面的效率要高于InnoDB引擎的博客,當(dāng)然只是個人的建議,大多數(shù)博客還是根據(jù)實際情況下謹(jǐn)慎選擇。
總結(jié)
如果你的應(yīng)用程序一定要使用事務(wù),毫無疑問你要選擇INNODB引擎。但要注意,INNODB的行級鎖是有條件的。在where條件沒有使用主鍵時,照樣會鎖全表。比如DELETE FROM mytable這樣的刪除語句。
如果你的應(yīng)用程序?qū)Σ樵冃阅芤筝^高,就要使用MYISAM了。MYISAM索引和數(shù)據(jù)是分開的,而且其索引是壓縮的,可以更好地利用內(nèi)存。所以它的查詢性能明顯優(yōu)于INNODB。壓縮后的索引也能節(jié)約一些磁盤空間。MYISAM擁有全文索引的功能,這可以極大地優(yōu)化LIKE查詢的效率。
有人說MYISAM只能用于小型應(yīng)用,其實這只是一種偏見。如果數(shù)據(jù)量比較大,這是需要通過升級架構(gòu)來解決,比如分表分庫,而不是單純地依賴存儲引擎。
現(xiàn)在一般都是選用innodb了,主要是myisam的全表鎖,讀寫串行問題,并發(fā)效率鎖表,效率低myisam對于讀寫密集型應(yīng)用一般是不會去選用的。只用恰當(dāng)?shù)尼槍I(yè)務(wù)類型來選擇合適的表類型,才能最大的發(fā)揮MySQL的性能優(yōu)勢。
到此這篇關(guān)于MySQL存儲引擎InnoDB與Myisam的優(yōu)缺點的文章就介紹到這了,更多相關(guān)InnoDB與Myisam的優(yōu)缺點內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
30個mysql千萬級大數(shù)據(jù)SQL查詢優(yōu)化技巧詳解
本文總結(jié)了30個mysql千萬級大數(shù)據(jù)SQL查詢優(yōu)化技巧,特別適合大數(shù)據(jù)里的MYSQL使用2018-03-03Mysql Binlog快速遍歷搜索記錄及binlog數(shù)據(jù)查看的方法
這篇文章主要介紹了Mysql Binlog快速遍歷搜索記錄及binlog數(shù)據(jù)查看的方法的相關(guān)資料,需要的朋友可以參考下2016-01-01MySQL遞歸sql語句WITH表達(dá)式實現(xiàn)方法代碼
SQL遞歸查詢語句是指通過遞歸方式對數(shù)據(jù)進(jìn)行查詢的語句,下面這篇文章主要給大家介紹了關(guān)于MySQL遞歸sql語句WITH表達(dá)式實現(xiàn)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01MySQL 數(shù)據(jù)庫約束、聚合查詢和聯(lián)合查詢使用案例
這篇文章主要介紹了MySQL 數(shù)據(jù)庫約束、聚合查詢和聯(lián)合查詢使用案例,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08深入淺析MySQL從刪庫到跑路_高級(一)——數(shù)據(jù)完整性
數(shù)據(jù)完整性是指數(shù)據(jù)的可靠性和準(zhǔn)確性,數(shù)據(jù)完整性類型有四種,本文給大家提到,接下來通過本文給大家介紹MySQL從刪庫到跑路的內(nèi)容分析,感興趣的朋友跟隨小編一起看看吧2018-11-1164位 win10系統(tǒng)安裝綠色版mysql-5.7.16-winx64的教程
這篇文章主要介紹了64位 win10系統(tǒng)安裝綠色版mysql-5.7.16-winx64的教程,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-10-10MySQL如何對數(shù)據(jù)進(jìn)行排序圖文詳解
我們知道從MySQL表中使用SQL SELECT語句來讀取數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL如何對數(shù)據(jù)進(jìn)行排序的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08