1.什么是MyISAM引擎?
MyISAM引擎是MySQL關系數據庫管理系統的默認存儲引擎(MySQL5.5.5以前),這種MySQL的表存儲結構從舊的ISAM代碼擴展出許多有用的功能.
在存儲的時候,每一個MyISAM表都對應於硬盤上的三個文件.這樣三個文件有一樣的文件名,但是擴展名不一樣,都有其不同的用途: .frm文件保存表的定義,這個文件並不是MyISAM引擎的一部分,而是服務器的一部分,.MYD保存表的數據;.MYI是表的索引文件. .MYD和.MYI才是MyISAM的關鍵點:
2.MyISAM的引擎特點.
1).不支持事務(事務是指邏輯上的一組操作,組成這組操作的各個單元,要么全成功,要么全失敗)
2).表級鎖定(更新時鎖整個表):其鎖定機制是表級鎖定,這樣雖然可以讓鎖定的實現成本很小但是同時大大降低了其並發的性能.
3).讀寫相互阻塞:不僅會在寫入的時候阻塞讀取,MyISAM還會在讀取的時候阻塞寫入,但是讀本身不會阻塞另外的讀.
4).只會緩存索引:MyISAM可以通過Key_buffer_size緩存索引,以大大提高訪問性能,減少磁盤IO,但是這個緩存區只會緩存索引,而不會緩存數據.
5).讀取速度快,占用資源相對少.
6).不支持外鍵約束,但是支持全文索引.
7).在MySQL5.5.5以前是默認的存儲引擎.
3.MyISAM引擎的適用的生產場景
1)不需要支持事務的業務(例如轉賬,付款就不行)
2)一般為讀數據比較多的應用,讀寫都頻繁則不合適,會堵塞,讀多或者寫多單一性都可以.
3)讀寫並發訪問較少的業務(單獨讀或者單獨寫高並發可以,同時讀寫並發不行)(主要是鎖定機制問題,其實鎖定整個表,會有堵塞問題)
4)數據修改相對較少的業務.
5)對數據一致性要求不是非常高的業務.
6)硬件資源較差的機器可以使用MyISAM,一般為中小型網站.
總結:單一對數據庫的操作都可以使用MyISAM,即是盡量純讀,或者純寫(insert,update,delete)等.
4.MyISAM引擎調優精要:
1).設置合適的索引(緩存機制).
2).調整讀寫優先級,根據實際需求確保重要操作更有限執行.
3).啟用延時插入(盡量批量插入,降低寫的頻率)
4).盡量順序操作,讓insert數據都寫入到尾部,減少阻塞.
5).分解大的時間長的操作,降低單個操作的阻塞時間.
6).降低並發數(減少對MySQL的訪問),某些高並發的場景可以通過應用進行排隊隊列機制.
7).對於靜態(更改不頻繁)的數據庫數據,充分利用Query Cache或者memcached緩存服務極大可能的提高訪問效率.
8).MyISAM的count只有在全表掃描的時候才是最高效的,帶有條件的count都需要進行試機的數據訪問.
9).也可以在做主從同步的時候主庫使用InnoDB,從庫使用MyISAM,進行讀寫分離(不推薦使用,數據遷移和升級比較麻煩)