更新時間:2021-01-15 17:32:40 來源:動力節點 瀏覽975次
MyISAM是曾經的默認MySQL 插件式存儲引擎,它是在 Web、數據倉儲和其他應用環境下常使用的存儲引擎。MyISAM是基于ISAM引擎發展起來的,增加了許多有用的擴展。雖然性能極佳,但卻有一個缺點:不支持事務處理(transaction)。不過,在這幾年的發展下,MySQL也導入了InnoDB(另一種數據庫引擎),以強化參照完整性與并發違規處理機制,后來就逐漸取代MyISAM存儲引擎。
一、MyISAM的存儲方式
MyISAM是基于非聚簇索引進行存儲的。基于MyISAM存儲引擎的表支持3種不同的存儲格式。包括靜態型、動態型和壓縮型。
1.靜態型:就是定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的數據類型),這樣mysql就會自動使用靜態myisam格式。
使用靜態格式的表的性能比較高,因為在維護和訪問的時候以預定格式存儲數據時需要的開銷很低。但是這高性能是有空間換來的,因為在定義的時候是固定的,所以不管列中的值有多大,都會以最大值為準,占據了整個空間。
2.動態型:如果列(即使只有一列)定義為動態的(xblob, xtext, varchar等數據類型),這時myisam就自動使用動態型,雖然動態型的表占用了比靜態型表較少的空間,但帶來了性能的降低,因為如果某個字段的內容發生改變則其位置很可能需要移動,這樣就會導致碎片的產生。隨著數據變化的怎多,碎片就會增加,數據訪問性能就會相應的降低。
3.壓縮型:如果在這個數據庫中創建的是在整個生命周期內只讀的表,則這種情況就是用myisam的壓縮型表來減少空間的占用。
MyISAM提供了大量的特性,包括全文索引,壓縮,空間函數,延遲更新索引鍵等。進行壓縮后的表是不能進行修改的,但是壓縮表可以極大減少磁盤占用空間,因此也可以減少磁盤IO,從而提供查詢性能。
二、MyISAM的特點
1.不支持事務。
2.表級鎖定,數據更新時鎖定整個表:其鎖定機制是表級鎖定,這雖然可以讓鎖定的實現成本很小但是也同時大大降低了其并發性能。
3.讀寫互相阻塞:不僅會在寫入的時候阻塞讀取,myisam還會在讀取的時候阻塞寫入,但讀本身并不會阻塞另外的讀。
4.只會緩存索引:myisam可以通過key_buffer_size緩存索引,以大大提高訪問性能,減少產品IO,但是這個緩存區只會緩存索引,而不會緩存數據。
5.讀取速度較快,占用資源相對少。
6.不支持外鍵約束,但支持全文索引。
三、MyiSAM適用的生產業務場景,
1 、不需要事務支持的業務(例如轉賬就不行)。
2 、一般為讀數據比較多的應用,讀寫都頻繁場景不適合,讀多或者寫多的都適合。
3 、讀寫并發訪問相對較低的業務(純讀純寫高并發也可以)(鎖定機制問題)
4 、數據修改相對較少的業務(阻塞問題)。
5 、以讀為主的業務,例如:數據庫系統表、www, blog ,圖片信息數據庫,用戶數據庫,商品庫等業務。
6 、對數據一致性要求不是非常高的業務(不支持事務)。
7 、硬件資源比較差的機器可以用 MyiSAM (占用資源少)
MySQL數據庫中除了MyISAM存儲引擎,還有目前MySQL的默認存儲引擎InnoDB,與MyISAM不同的是,InnoDB專注事務,而MyISAM專注性能,至于對InnoDB存儲引擎的介紹,小伙伴們請移步到本站的MySQL教程,里面對InnoDB有很詳細的講解。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習