什么是myisam引擎
myisam引擎是MySQL關系數據庫系統的默認儲存引擎(mysql 5.5.5之前)。這種MySQL表存儲結構從舊的ISAM代碼擴展出許多有用的功能。在新版本的Mysql中,Innodb引擎由於其對事務參照完整性,以及更高的並發性等優點開始逐步取代Myisam引擎。
每一個myisam的表都對應於硬盤上的三個文件。這三個文件有一樣的文件名,但是有不同的擴展名指示其類型用途:.frm文件保存表的定義,這個文件並不是myisam引擎的一部分,而是服務器的一部分;.MYD保存表的數據;.MYI是表的索引文件。.MYD和.MYI是MyISAM的關鍵點。
[root@XM ~]# ll /data/3307/mysql/proc.*
-rw-rw---- 1 mysql mysql 9996 Mar 25 04:17 /data/3307/mysql/proc.frm
-rw-rw---- 1 mysql mysql 0 Mar 25 04:17 /data/3307/mysql/proc.MYD
-rw-rw---- 1 mysql mysql 2048 Mar 25 04:17 /data/3307/mysql/proc.MYI
[root@XM mysql]# file user.MYI
user.MYI: MySQL MISAM compressed data file Version 1
myisam 引擎的特點
1.不支持事務
(事務是指邏輯上的一組操作,組成這組操作的各個單元,要么全成功要么全失敗)
2.表級鎖定,數據更新時鎖定整個表:其鎖定機制是表級鎖定,這雖然可以讓鎖定的實現成本很小但是也同時大大降低了其並發性能。
表級鎖定
3.讀寫互相阻塞:不僅會在寫入的時候阻塞讀取,myisam還會在讀取的時候阻塞寫入,但讀本身並不會阻塞另外的讀。
4.只會緩存索引:myisam可以通過key_buffer_size緩存索引,以大大提高訪問性能,減少產品IO,但是這個緩存區只會緩存索引,而不會緩存數據。
key_buffer_size = 16M
5.讀取速度較快,占用資源相對少。
6.不支持外鍵約束,但支持全文索引。
MyiSAM 引攀適用的生產業務場景,
1 、不需要事務支持的業務(例如轉賬就不行)。
2 、一般為讀數據比較多的應用,讀寫都頻繁場景不適合,讀多或者寫多的都適合。
3 、讀寫並發訪問相對較低的業務(純讀純寫高並發也可以)(鎖定機制問題)
4 、數據修改相對較少的業務(阻塞問題)。
5 、以讀為主的業務,例如:數據庫系統表、www, blog ,圖片信息數據庫,用戶數據庫,商品庫等業務。
6 、對數據一致性要求不是非常高的業務(不支持事務)。
7 、硬件資源比較差的機器可以用 MyiSAM (占用資源少)
小結:單一對數據庫的操作都可以使用MyiSAM,所謂單一就是盡量純讀,或純寫 ( insert . update , delete )等
8 、使用讀寫分離的 MySQL 從庫可以使用 MyISAM。