一、存儲引擎是什麼?html
MySQL中的數據用各類不一樣的技術存儲在文件(或者內存)中。這些技術中的每一種技術都使用不一樣的存儲機制、索引技巧、鎖定水平而且最終提供普遍的不一樣的功能和能力。經過選擇不一樣的技術,你可以得到額外的速度或者功能,從而改善你的應用的總體功能。這些不一樣的技術以及配套的相關功能在MySQL中被稱做存儲引擎(也稱做表類型)。MySql默認配置了許多不一樣的存儲引擎,能夠預先設置或者在MySql服務器中啓用。mysql
二、MYSQL支持的數據引擎sql
MyISAM:默認的MySQL插件式存儲引擎,它是在Web、數據倉儲和其餘應用環境下最常使用的存儲引擎之一。數據庫
InnoDB:用於事務處理應用程序,具備衆多特性,包括ACID事務支持。安全
BDB:可替代InnoDB的事務引擎,支持COMMIT、ROLLBACK和其餘事務特性。服務器
Memory:將全部數據保存在RAM中,在須要快速查找引用和其餘相似數據的環境下,可提供極快的訪問。併發
Merge:容許MySQL DBA或開發人員將一系列等同的MyISAM表以邏輯方式組合在一塊兒,並做爲1個對象引用它們。對於諸如數據倉儲等VLDB環境十分適合。分佈式
Archive:爲大量不多引用的歷史、歸檔、或安全審計信息的存儲和檢索提供了完美的解決方案。post
Federated:可以將多個分離的MySQL服務器連接起來,從多個物理服務器建立一個邏輯數據庫。十分適合於分佈式環境或數據集市環境。性能
Cluster/NDB:MySQL的簇式數據庫引擎,尤爲適合於具備高性能查找要求的應用程序,這類查找需求還要求具備最高的正常工做時間和可用性。
Other:其餘存儲引擎包括CSV(引用由逗號隔開的用做數據庫表的文件),Blackhole(用於臨時禁止對數據庫的應用程序輸入),以及Example引擎(可爲快速建立定製的插件式存儲引擎提供幫助)。
三、啓動InnoDB引擎的方法
Mysql中默認的是MyISAM數據引擎,惋惜此引擎不支持事務處理,咱們須要將默認的數據引擎改成InnoDB。其中InnoDB和BerkeleyDB支持事務處理,只是默認的狀況下都是被disable的。全部的引擎裏面,InnoDB性能最強大,算是商業級的。啓動InnoDB引擎的方法以下:
1)關閉mysql的服務
2)修改my.ini
將default-storage-engine=INNODB前的註釋(#)去掉
將skip-innodb這行註釋(加上#)
3)保存後重啓mysql服務
四、MyISAM引擎和InnoDB引擎的基本差異
Innodb引擎提供了對數據庫ACID事務的支持,而且實現了SQL標準的四種隔離級別。該引擎還提供了行級鎖和外鍵約束,它的設計目標是處理大容量數據庫系統,它自己其實就是基於MySQL後臺的完整數據庫系統,MySQL運行時Innodb會在內存中創建緩衝池,用於緩衝數據和索引。可是該引擎不支持FULLTEXT類型的索引,並且它沒有保存表的行數,當SELECT COUNT(*) FROM TABLE時須要掃描全表。當須要使用數據庫事務時,該引擎固然是首選。因爲鎖的粒度更小,寫操做不會鎖定全表,因此在併發較高時,使用Innodb引擎會提高效率。可是使用行級鎖也不是絕對的,若是在執行一個SQL語句時MySQL不能肯定要掃描的範圍,InnoDB表一樣會鎖全表。
2)MyIASM引擎
MyIASM是MySQL默認的引擎,可是它沒有提供對數據庫事務的支持,也不支持行級鎖和外鍵,所以當INSERT(插入)或UPDATE(更新)數據時即寫操做須要鎖定整個表,效率便會低一些。不過和Innodb不一樣,MyIASM中存儲了表的行數,因而SELECT COUNT(*) FROM TABLE時只須要直接讀取已經保存好的值而不須要進行全表掃描。若是表的讀操做遠遠多於寫操做且不須要數據庫事務的支持,那麼MyIASM也是很好的選擇。
3)主要區別:
4)應用場景:
這些區別可以影響應用程序的性能和功能,所以你必須針對業務類型來選擇合適的引擎,才能最大的發揮MySQL的性能優點。
轉自:http://www.cnblogs.com/aspirant/p/6920880.html