標籤:mysql效能調優六 innodb引擎和myisam引擎的效能
對於這兩種儲存引擎的選擇,要根據項目的應用特點來權衡,而對於複雜的應用系統,也可以根據實際情況來選擇多種儲存引擎的組合。不過這種方法不建議採取。
MyISAM支援全文索引,這是一種基於分詞建立的索引,支援一些比較複雜的查詢,但不是事務安全的,而且不支援外鍵。每張MyISAM表存放在3個檔案中:frm檔案存放表格定義;資料檔案是MYD;索引檔案是MYI;對於MyISAM表,可以手工或者自動執行檢查或修複操作。
InnoDB是事務型引擎,支援復原,具有崩潰恢複能力,多版本並發控制,支援ACID事務、支援行級鎖定(InnoDB的行級鎖不是絕對的,如果一個SQL語句沒有使用到索引,那麼InnoDB會鎖全表)。
InnoDB的工作原理:就是把資料撈帶記憶體當中,被使用者讀寫,這樣大大增加了效能。當資料全部載入到記憶體當中時,這時的效能是最好的,它的設計理論是充分利用記憶體,減少磁碟I/O使用率。
MyISAM和InnoDB的區別有以下幾點:
1.MyISAM是非事務安全型的,而InnoDB是事務安全型的,也就是ACID事務支援。
2.MyISAM鎖是表級鎖,鎖開銷小,而InnoDB支援行級鎖定,鎖管理開銷大,支援更好的並發寫操作。
3.在最新的版本中,兩者都已經支援全文索引。
4.MyISAM相對簡單,管理方便,因此在效率上優先於InnoDB,小型應用可以考慮使用。
5.MyISAM表是儲存成檔案的形式,在跨平台的資料轉移中使用其儲存會省去不少的麻煩。
6.InnoDB表比MyISAM表更安全,可以保證在資料不丟失的情況下切換非事務表到事務表。
總結:
MyISAM儲存引擎的讀鎖和寫鎖是互斥的,讀寫操作時串列的。當一個進程請求某個MyISAM表的讀鎖,同時另一個進程也請求通一表的寫鎖,MySQL是寫進程先獲得鎖,不僅如此,即使讀請求先到鎖等待隊列,寫請求後到,寫鎖也會插到讀鎖請求之前,這是因為MySQL會認為寫請求一般要比讀請求重要,這也是MyISAM表不太適合有大量更新操作和查詢操作應用的原因,因為大量的更新操作會造成查詢操作很難忽地讀鎖,從而可能永遠阻塞。
InnoDB用於交易處理應用程式,具有眾多特性,包括支援ACID事務、行鎖等。如果應用中需要執行大量的讀寫操作,則應使用InnoDB,這樣可以提高多使用者並行作業的效能,所以要盡量優先使用InnoDB引擎。
MySql效能調優(六)InnoDB引擎和Myisam引擎的效能對比