MYSQL存儲引擎特性及選擇

創建新表時如果不指定存儲引擎,系統就會使用默認引擎,MYSQL5.5之前默認引擎是MyISAM,5.5之後改爲了InnoDB。
查看默認存儲引擎的方法:show variables like 'table_type'; 
查看數據庫支持的存儲引擎:1.show engines \g  2.show varaables like 'have%';

更改存儲引擎的方法:alert table tablename engine = innodb;

 各種存儲引擎特性

MyISAM
MyISAM 不支持事務、也不支持外鍵,其優勢是訪問速度快,對事務完整性沒有要求或者以SELELCT、INSERT爲主的應用可以使用該引擎來創建表。
MyISAM在磁盤上存儲成3個文件,其文件名和表明相同,擴展名分別是.frm(存儲表定義)、
.MYD(MYData,存儲數據)、MYI(MYIndex,存儲索引)。數據文件和索引文件可以放到不同的絕對路徑下,創建表的時候通過DATA DIRECTORY 和INDEX DIRECTORY 語句指定。
MyISAM類型的表提供修復工具,可以用CHECK TABLE 語句檢查表的健康,並用REPAIR TABLE修復。
MyISAM支持3中存儲格式:靜態表(固定長度)、動態表、壓縮表。
靜態表是默認存儲格式,優點是存儲非常迅速,容易緩存,出現故障容易恢復;缺點是佔用空間比動態表多,存儲時按列寬補足空格,返回給應用時會去掉空格,所以如果保存的時候內容後面有空格,返回結果的時候會被去掉。
動態表記錄不是固定的長度,優點是佔用空間相對較少,但是頻繁的更新和刪除記錄會產生碎片,需要定期的執行 OPTIMIZE TABLE語句或myisamchk-r命令來改善性能,並且故障時相對較難恢復

InnoDB 
InnoDB 存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比MYISAM,InnoDB的處理效率差些,並且會佔用更多的磁盤空間以保留數據和索引。
1.自動增長列
  自動增長列可以手工插入,但是插入值如果是0或者空,則實際插入的將是自動增長後的值可以通過alert table tablename auto_increment=n;強制設置自動增長的初始值。
  InnoDB表自動增長列必須是索引,如果是組合索引,必須是組合索引的第一列。對於myisam可以是組合索引的其他列。
2.外鍵約束
mysql支持外鍵的存儲引擎只有InnoDB,在創建外鍵時,要求父表必須有對應的索引,子表在創建外鍵時也會自動創建對應的索引。創建索引時可以指定在刪除更新父表時對子表進行相應的操作,RESTRICT(無操作)、CASCADE(子表跟隨父表操作)、SET NULL(置空)、NO ACTION(無操作)。
3.存儲方式
 共享表空間存儲
 多表空間存儲
 進行單表備份和恢復
 alert TABLE tablename DISCARD  TABLESPACE;
 alert table tablename IMPORT  TAblESPACE;
 只能恢復到表原來所在的數據庫中, mysqldump和mysqlimport可以恢復到目標數據庫。

MEMORY
MEMORY存儲引擎使用存在於內存中的內容來創建表,每個MENORY表實際上對應一個磁盤文件,格式爲.frm。MENORY類型的表訪問非常的快,因爲他的數據放在內存中默認使用hash索引,但是一旦服務關閉,表中數據就會丟失。在給MEMORY表創建索引的時候可以指定HASHsuoyin還是BTREE索引,create index mem_hash using hash on table mem_tab (id);
啓動mysql服務的時候使用-init-file選項,把insert into ... select 或者load data infile語句放入這個文件,就可以在服務啓動的時候從持久穩固的數據源裝載表。
MEMORY類型的存儲引擎主要用於那些內容變化不頻繁的代碼表,或者作爲統計操作的中間表結果。對MEMOTY表進行更新操作,數據不會存入磁盤,所以要考慮重啓服務後如何獲得這些修改後的數據。

MERGE
MERGE存儲引擎是一組MyISAM表的組合,這些MyISAM表必須結構完全相同,MERGE表本身沒有數據,MERGE表通過INSERT_METHOD=LAST/FIRST 定義插入哪個MyISAM表,不定義這個子句或者定義爲NO表示不能對MERGE表進行操作。MERGE表不能智能的將記錄下顎到對應的表,而分區表可以。假定有兩個MyISAM表 p1,p2 創建MERGE表的語句爲:
create table p_all (id int,p_date datetime,INDEX(id))engine =merge union=(p1,p2) INSERT_METHOD=LAST;



如何選擇合適的引擎
MyISAM:如果應用是以讀操作和插入操作爲主,只有很少的更新和刪除操作,並且對事務的完整性,併發要求不高
InnoDB:用於事務處理應用程序,支持外鍵。對事務完整性有較高要求,在併發條件下要求數據一致性,除了插入和查詢,還包括很多更新刪除操作。
MEMORY:通常用於更新不太頻繁的小表,用以快速得到訪問結果。
MERGE:用於將一系列 的MyISAM表以邏輯的方式組合在一起,可以突破MyISAM表的大小,將表分佈到不同的磁盤上,改善訪問效率。


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