数据库关机_数据库:MySQL常见的三种存储引擎InnoDB、MyISAM、MEMORY的区别?
InnoDB、MyISAM兩種存儲引擎的大致區(qū)別?
- 1.InnoDB支持事務(wù),MyISAM不支持, 這一點(diǎn)是非常之重要。事務(wù)是一種高級的處理方式,如在一些列增刪改中只要哪個(gè)出錯(cuò)還可以回滾還原,而MyISAM就不可以了。
- 2.MyISAM適合查詢以及插入為主的應(yīng)用。
- 3.InnoDB適合頻繁修改以及涉及到安全性較高的應(yīng)用。
- 4.InnoDB支持外鍵,MyISAM不支持。
- 5.從MySQL5.5.5以后,InnoDB是默認(rèn)引擎。
- 6.InnoDB不支持FULLTEXT類型的索引。
- 7.InnoDB中不保存表的行數(shù),如select count() from table時(shí),InnoDB需要掃描一遍整個(gè)表來計(jì)算有多少行,但是MyISAM只要簡單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count()語句包含where條件時(shí)MyISAM也需要掃描整個(gè)表。
- 8.對于自增長的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中可以和其他字段一起建立聯(lián)合索引。
- 9.DELETE FROM table時(shí),InnoDB不會重新建立表,而是一行一行的 刪除,效率非常慢。MyISAM則會重建表。
- 10.InnoDB支持行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like '%lee%'。
InnoDB、MyISAM兩種存儲引擎的大致區(qū)別?
MySQL有多種存儲引擎,每種存儲引擎有各自的優(yōu)缺點(diǎn),可以擇優(yōu)選擇使用:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
雖然MySQL里的存儲引擎不只是MyISAM與InnoDB這兩個(gè),但常用的就是兩個(gè)。
關(guān)于MySQL數(shù)據(jù)庫提供的兩種存儲引擎,MyISAM與InnoDB選擇使用:
l INNODB會支持一些關(guān)系數(shù)據(jù)庫的高級功能,如事務(wù)功能和行級鎖,MyISAM不支持。
l MyISAM的性能更優(yōu),占用的存儲空間少,所以,選擇何種存儲引擎,視具體應(yīng)用而定。
如果你的應(yīng)用程序一定要使用事務(wù),毫無疑問你要選擇INNODB引擎。但要注意,INNODB的行級鎖是有條件的。在where條件沒有使用主鍵時(shí),照樣會鎖全表。比如DELETE FROM mytable這樣的刪除語句。
如果你的應(yīng)用程序?qū)Σ樵冃阅芤筝^高,就要使用MyISAM了。MyISAM索引和數(shù)據(jù)是分開的,而且其索引是壓縮的,可以更好地利用內(nèi)存。所以它的查詢性能明顯優(yōu)于INNODB。壓縮后的索引也能節(jié)約一些磁盤空間。MyISAM擁有全文索引的功能,這可以極大地優(yōu)化LIKE查詢的效率。
有人說MyISAM只能用于小型應(yīng)用,其實(shí)這只是一種偏見。如果數(shù)據(jù)量比較大,這是需要通過升級架構(gòu)來解決,比如分表分庫,而不是單純地依賴存儲引擎。
現(xiàn)在一般都是選用innodb了,主要是MyISAM的全表鎖,讀寫串行問題,并發(fā)效率鎖表,效率低,MyISAM對于讀寫密集型應(yīng)用一般是不會去選用的。
MEMORY存儲引擎
MEMORY是MySQL中一類特殊的存儲引擎。它使用存儲在內(nèi)存中的內(nèi)容來創(chuàng)建表,而且數(shù)據(jù)全部放在內(nèi)存中。這些特性與前面的兩個(gè)很不同。
每個(gè)基于MEMORY存儲引擎的表實(shí)際對應(yīng)一個(gè)磁盤文件。該文件的文件名與表名相同,類型為frm類型。該文件中只存儲表的結(jié)構(gòu)。而其數(shù)據(jù)文件,都是存儲在內(nèi)存中,這樣有利于數(shù)據(jù)的快速處理,提高整個(gè)表的效率。值得注意的是,服務(wù)器需要有足夠的內(nèi)存來維持MEMORY存儲引擎的表的使用。如果不需要了,可以釋放內(nèi)存,甚至刪除不需要的表。
MEMORY默認(rèn)使用哈希索引。速度比使用B型樹索引快。當(dāng)然如果你想用B型樹索引,可以在創(chuàng)建索引時(shí)指定。
注意,MEMORY用到的很少,因?yàn)樗前褦?shù)據(jù)存到內(nèi)存中,如果內(nèi)存出現(xiàn)異常就會影響數(shù)據(jù)。如果重啟或者關(guān)機(jī),所有數(shù)據(jù)都會消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。
MySQL的MyISAM與InnoDB兩種存儲引擎在,事務(wù)、鎖級別,各自的適用場景?
事務(wù)處理上方面
MyISAM:強(qiáng)調(diào)的是性能,每次查詢具有原子性,其執(zhí)行數(shù)度比InnoDB類型更快,但是不提供事務(wù)支持。
InnoDB:提供事務(wù)支持事務(wù),外部鍵等高級數(shù)據(jù)庫功能。 具有事務(wù)(commit)、回滾(rollback)和崩潰修復(fù)能力(crash recovery capabilities)的事務(wù)安全(transaction-safe (ACID compliant))型表。
鎖級別
MyISAM:只支持表級鎖,用戶在操作MyISAM表時(shí),select,update,delete,insert語句都會給表自動加鎖,如果加鎖以后的表滿足insert并發(fā)的情況下,可以在表的尾部插入新的數(shù)據(jù)。
InnoDB:支持事務(wù)和行級鎖,是innodb的最大特色。行鎖大幅度提高了多用戶并發(fā)操作的新能。但是InnoDB的行鎖,只是在WHERE的主鍵是有效的,非主鍵的WHERE都會鎖全表的。
總結(jié)
以上是生活随笔為你收集整理的数据库关机_数据库:MySQL常见的三种存储引擎InnoDB、MyISAM、MEMORY的区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 方舟手游如何多人游戏(方舟生存进化)
- 下一篇: mysql int 优化_MySQL数据