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