1. 程式人生 > >MyISAM 存儲引擎的特點及優化方法

MyISAM 存儲引擎的特點及優化方法

同一文件 表格 批量插入 圖片 寫入 部分 全文檢索 讀取 相互

MyISAM: MyISAM 管理非事務表、是ISAM 的擴展格式。除了提供ISAM裏所沒有的索引的字段管理等的大量功能、MyISAM 還使用一種表格鎖定的機制、來優化多個並發的讀寫操作。MyISAM 提供高速存儲和檢索、以及全文搜索能力;在MYSQL5.5.5版本及以下的所有MYSQL配置裏被支持。也是默認的存儲引擎。 特性: 1:不支持事務、不具備AICD特性(原子性、一致性、分離性、永久性); 2:表級別鎖定形式(更新數據時鎖定整個表、這樣雖然可以讓鎖定的實現成本很小但是同時大大降低了其並發的性能); 3:讀寫相互阻塞(不僅會在寫入的時候阻塞讀取、還會在讀取的時候阻塞寫入、但是讀取不會阻塞讀取); 4:只會緩存索引(myisam通過key_buffer_size來設置緩存索引,提高訪問性能較少磁盤IO的壓力、但是只緩存索引、不緩存數據); 5:讀取速度快、占用資源比較少; 6:不支持外鍵約束、只支持全文檢索; 7:是MySQL5.5.5版本之前的默認存儲引擎; 應用場景:
1:不需要事務支持的場景; 2:讀多或者寫多的單一業務場景、讀寫頻繁的則不適合、會阻塞; 3:讀寫並發訪問較低的業務; 4:數據修改相對較少的業務; 5:以讀為主的業務(如博客、圖片信息數據庫、用戶數據庫等); 6:對數據的一致性要求不是很高的業務; 7:服務器硬件資源相對比較差的機器; 調優精要: 1:設置合適的索引(緩存機制); 2:調整讀寫優先權限、根據業務需求、確保重要操作更有執行權限; 3:啟用延時插入(盡量批量插入、降低寫的頻率); 4:寫數據的時候、順序操作、讓insert數據都寫入到尾部、減少阻塞; 5:分解大的時間長的操作、降低單個操作的阻塞時間; 6:降低並發數(減少數據庫的訪問、高並發場景的話、可以使用隊列機制); 7:對於靜態更新不頻繁的數據庫數據、充分利用Query Cache或者Memcached緩存服務、極大可能的提高訪問效率; 8:count的時候、只有count(*)會直接返回行數、才是效率最高的;帶有where條件的count都需要進行全部數據的訪問; 9:可以配置主從數據庫的時候、主數據庫使用InnoDB、從數據庫使用MyISAM、進行讀寫分離; 存儲:
在存儲的時候、每一個MyISAM的表都對應硬盤上的三個文件(同一文件名、不同擴展名): .frm:保存表的定義、這個文件不是MyISAM引擎的一部分、是數據庫服務器的一部分; .MYD:保存表的數據; .MYI:保存表的索引文件; (.MYD 和 .MYI 是MyISAM 的關健點 )

MyISAM 存儲引擎的特點及優化方法