一、MyISAM引擎特點(diǎn)
MyISAM引擎是MySQL5.5版本(不含)之前的數(shù)據(jù)庫(kù)所默認(rèn)的數(shù)據(jù)表引擎。每一個(gè)采用MyISAM引擎的數(shù)據(jù)表在實(shí)際存儲(chǔ)中都是由三個(gè)文件組成,分別是frm文件,MYD文件和MYI文件,文件后綴為上述三個(gè),文件名與數(shù)據(jù)表名相同。一個(gè)典型的MyISAM類(lèi)型的數(shù)據(jù)表如下:frm文件保存表的結(jié)構(gòu),MYD保存表的數(shù)據(jù),MYI保存表的索引文件,MYD和MYI與MyISAM引擎有很深的關(guān)聯(lián)。
除此之外,MyISAM引擎的特點(diǎn)還有:
1、不支持事務(wù)。
2、表級(jí)鎖定。 即發(fā)生數(shù)據(jù)更新時(shí),會(huì)鎖定整個(gè)表,以防止其他會(huì)話對(duì)該表中數(shù)據(jù)的同時(shí)修改所導(dǎo)致的混亂。這樣做可以使得操作簡(jiǎn)單,但是會(huì)減少并發(fā)量。
3、讀寫(xiě)互相堵塞。 在MyISM類(lèi)型的表中,既不可以在向數(shù)據(jù)表中寫(xiě)入數(shù)據(jù)的同時(shí)另一個(gè)會(huì)話也向該表中寫(xiě)入數(shù)據(jù),也不允許其他的會(huì)話讀取該表中的數(shù)據(jù)。只允許多個(gè)會(huì)話同時(shí)讀取該數(shù)據(jù)表中的數(shù)據(jù)。
4、只會(huì)緩存索引,不會(huì)緩存數(shù)據(jù)。 所謂緩存,就是指數(shù)據(jù)庫(kù)在訪問(wèn)磁盤(pán)數(shù)據(jù)時(shí),將更多的數(shù)據(jù)讀取進(jìn)入內(nèi)存,這樣可以使得當(dāng)訪問(wèn)這些數(shù)據(jù)時(shí),直接從內(nèi)存中讀取而不是再次訪問(wèn)硬盤(pán)。MyISAM可以通過(guò)key_buffer_size緩存索引,以減少磁盤(pán)I/O,提升訪問(wèn)性能。但是MyISAM數(shù)據(jù)表并不會(huì)緩存數(shù)據(jù)。
5、讀取速度較快,占用資源較少。
6、不支持外鍵約束。
7、支持全文索引。
二、MyISAM引擎適用場(chǎng)景
由MyISAM的特性,我們就可以簡(jiǎn)單的列舉MyISAM引擎適用場(chǎng)景了。
1、不需要事務(wù)支持的場(chǎng)景。
2、讀取操作比較多,寫(xiě)入和修改操作比較少的場(chǎng)景。
3、數(shù)據(jù)并發(fā)量較低的場(chǎng)景。
4、硬件條件比較差的場(chǎng)景。
5、在配置數(shù)據(jù)庫(kù)讀寫(xiě)分離場(chǎng)景下,MySQL從庫(kù)可以使用MyISAM索引。
三、MyISAM引擎調(diào)優(yōu)思路
如果我們確定了業(yè)務(wù)場(chǎng)景中要使用MyISAM引擎,那么我們可以通過(guò)以下方式,來(lái)盡可能的避免MyISAM引擎的問(wèn)題,以使得我們業(yè)務(wù)場(chǎng)景下數(shù)據(jù)庫(kù)性能更加優(yōu)秀。
1、建立合適的索引。
2、調(diào)整讀寫(xiě)優(yōu)先級(jí),根據(jù)實(shí)際情況使得在高并發(fā)場(chǎng)景下重要的操作先執(zhí)行。
3、啟用延遲插入改善大批量寫(xiě)入性能。
4、在insert插入新數(shù)據(jù)時(shí),盡量讓新數(shù)據(jù)插入到尾部。
5、分解子查詢(xún)過(guò)多的操作。
6、降低業(yè)務(wù)場(chǎng)景下的并發(fā)操作。
7、對(duì)于更改不頻繁的數(shù)據(jù)表,使用query cache和memacache緩存以提升訪問(wèn)效率。