mysql優化系列02--(存儲引擎選擇)

摘自:http://blog.csdn.net/jack__frost/article/details/72904318

1. InnoDB引擎

    InnoDB是一個事務型的存儲引擎,有行級鎖定和外鍵約束。Innodb引擎提供了對數據庫ACID事務的支持,並且實現了SQL標準的四種隔離級別,關於數據庫事務與其隔離級別的內容請見數據庫事務與其隔離級別這類型的文章。該引擎還提供了行級鎖和外鍵約束,它的設計目標是處理大容量數據庫系統,它本身其實就是基於MySQL後臺的完整數據庫系統,MySQL運行時Innodb會在內存中建立緩衝池,用於緩衝數據和索引。

    但是該引擎不支持FULLTEXT類型的索引,而且它沒有保存表的行數,當SELECT COUNT(*) FROM TABLE時需要掃描全表。當需要使用數據庫事務時,該引擎當然是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在併發較高時,使用Innodb引擎會提升效率。但是使用行級鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表。  

//這個就是select鎖表的一種,不明確主鍵。增刪改查都可能會導致鎖全表

 SELECT * FROM products WHERE name='Mouse' FOR UPDATE;

適用場景: 

1)經常更新的表,適合處理多重併發的更新請求。  

2)支持事務。  

3)可以從災難中恢復(通過bin-log日誌等)。  

4)外鍵約束。只有他支持外鍵。  

5)支持自動增加列屬性auto_increment。

因此在海量存儲中,選擇InnoDB是合適的選擇

2.MyISAM

MyISAM存儲引擎是Mysql中常見的存儲引擎,MyISAM存儲引擎是基於ISAM存儲引擎發展起來的。MyISAM支持全文索引、壓縮存放、空間索引(空間函數)、表級鎖、延遲更新索引鍵。但是MyISAM不支持事務、行級鎖、更無法忍受的是崩潰後不能保證完全恢復(只能手動修復)。  MyISAM存儲引擎的表存儲成3個文件。文件的名字和表的名字相同。擴展名包含frm、MYD、MYI。其中frm爲擴展名的文件存儲表的結構;MYD爲擴展名的文件存儲數據,其是MYData的縮寫;MYI爲擴展名的文件存儲索引,其爲MYIndex的縮寫。  MyISAM存儲引擎的讀取數據很快,空間和內存使用比較低。

兩者的主要區別:

MyISAM是非事務安全型的,而InnoDB是事務安全型的。 

MyISAM鎖的粒度是表級,而InnoDB支持行級鎖定。 

MyISAM支持全文類型索引,而InnoDB不支持全文索引。 M

yISAM相對簡單,所以在效率上要優於InnoDB,小型應用可以考慮使用MyISAM。 

MyISAM表是保存成文件的形式,在跨平臺的數據轉移中使用MyISAM存儲會省去不少的麻煩。 

InnoDB表比MyISAM表更安全,可以在保證數據不會丟失的情況下,切換非事務表到事務表

MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。如果應用中需要執行大量的SELECT查詢,那麼MyISAM是更好的選擇。 

InnoDB用於事務處理應用程序,具有衆多特性,包括ACID事務支持。如果應用中需要執行大量的INSERT或UPDATE操作,則應該使用InnoDB,這樣可以提高多用戶併發操作的性能。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章