MySQL 存儲引擎的選擇

MySQL 的存儲引擎種類不少,有MyISAM、InnoDB、Archive、Blackhole、CSV、Memory、Merge、NDB等等,如下介紹經常使用的存儲引擎:緩存

1、MyISAM:安全

  在MySQL 5.1 及以前的版本,MyISAM 是默認的存儲引擎。MyISAM 提供了大量的特性,包括全文索引、壓縮、空間函數(GIS)等,但MyISAM  不支持事務、不支持外鍵、不支持行級鎖(僅支持 表級鎖)。特色是訪問速度快,對事務完整性沒有要求。以select、insert爲主的應用基本上均可以用這個引擎來建立表。MyISAM類型的表可能會損壞,緣由多是多種多樣的。能夠經過check table 語句檢查MyISAM表的健康,並用repair table 語句修復一個損壞的MyISAM 表。併發

  MyISAM 表磁盤上存儲成3 個文件,其中文件名和表名相同,但擴展名分別是:函數

.frm(存儲表定義) .MYD(MyData,存儲數據) .MYI(MyIndex,存儲索引)

  MyISAM 表還支持3 種不一樣的存儲格式,分別是:    高併發

    1. 靜態(固定長度)表:長度固定,優勢是存儲很是迅速,容易緩存,出現故障時容易恢復;缺點是佔用的空間一般比動態表多;性能

    2. 動態表:記錄長度不固定,這樣存儲的優勢是佔用的空間相對小,可是頻繁的更新和刪除記錄會產生碎片,須要定時執行spa

    optimize table 語句或myisamch-r 命令來改善性能。出現故障時恢復相對困難;設計

    3. 壓縮表:佔用很是小的磁盤空間,由於每一個記錄都是被單獨壓縮的,因此只有很是小的訪問開支。code

  MyISAM 特性是:blog

    1. 加鎖與併發:對整張表加鎖,而不是針對行。讀取時會對須要讀到的全部表加共享鎖,寫入時則對錶加排他鎖。可是在表有讀取

    查詢的同時,也能夠往表中插入新的記錄(這被稱爲併發插入,Concurrent Insert);

    2. 爲保證效率,不支持事務處理;

    3. count(*) 時效率高,不用遍歷全表,緣由是該引擎會記錄行數;

    4. 非聚簇索引,支持全文索引,索引數據和表數據分開存儲;

 

2、InnoDB: 

  MySQL 5.5以後默認的事務型引擎修改成InnoDB。它被設計用來處理大量的短時間事務,短事務大部分狀況是正常提交的,不多會被回滾。它是事務安全的,具備提交、回滾和崩潰恢復能力。InnoDB 表默認爲行級鎖,是基於聚簇索引創建的。聚簇索引對主鍵查詢有很高的性能。不過它的二級索引中必須包含主鍵列,因此若是主鍵列很大的話,其餘的索引都會很大。存儲格式是平臺獨立的,能夠將數據和索引文件複製到其餘平臺。

  InnoDB 存儲方式:

    1. 使用共享表空間存儲,這種建立的表,表結構數據保存在.frm 文件中,數據和索引數據保存在innodb_data_home_dir 和 innodb_data_file_path定義的表中間,能夠是多個文件;

    2. 使用多表空間存儲,這種方式建立的表,表結構數據仍然存在.frm 文件中,可是每一個表的數據和索引單獨保存在.ibd 中,若是是個分區表,則每一個分區對應單獨的.ibd 中,文件名是「表名+分區名」,能夠在建立分區的時候指定每一個分區的數據文件位置,以此來將表的IO均勻分佈在多個磁盤中;

  InnoDB 特性是:

    1. 事務安全;

    2. 行級鎖,爲承受高併發增長了競爭力;

    3. count(*) 時效率低,遍歷表一計算數量;

    4. 聚簇索引,主鍵默認爲聚簇索引,沒有主鍵時以第一列爲聚簇索引,普通索引指向聚簇索引;

    5. 主持主鍵、外鍵;

 

3、指定引擎: 

1create table mytable (name varchar(32)) engine=InnoDB; 2alter table mytable engine = MyISAM;
相關文章
相關標籤/搜索