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