1、什麼是存儲引擎
- 存儲引擎說白了就是表中數據的存儲方式。
- 不同的存儲引擎創建的表,在數據庫中存儲數據和結構的方式不同。
- 有些存儲引擎不支持事務,Mysql默認的存儲引擎InnoDB支持事務。
2、存儲引擎的使用
- 數據庫中的各表均被(在創建表時)指定的存儲引擎來處理。
- 服務器可用的引擎依賴於以下因素:
- MySQL的版本 (5.5x版本有9個存儲引擎)
- 服務器在開發時如何被配置
- 啓動選項
- 爲了解當前服務器中有哪些存儲引擎可用,可使用SHOW ENGINES語句:
mysql> SHOW ENGINES\G
- 在創建表時,可使用ENGINE選項爲CREATE TABLE語句顯式指定存儲引擎。
CREATE TABLE TABLENAME (NO INT) ENGINE = MyISAM;
- 如果在創建表時沒有顯式指定存儲引擎,則該表使用當前默認的存儲引擎
- 默認的存儲引擎可在my.ini配置文件中使用default-storage-engine選項指定。
- 現有表的存儲引擎可使用ALTER TABLE語句來改變:ALTER TABLE TABLENAME ENGINE = INNODB;
- 爲確定某表所使用的存儲引擎,可以使用SHOW CREATE TABLE或SHOW TABLE STATUS語句:
mysql> SHOW CREATE TABLE emp\G
mysql> SHOW TABLE STATUS LIKE 'emp' \G
3.常用的存儲引擎
1、MyISAM存儲引擎
- MyISAM存儲引擎是MySQL常用的引擎。
- 它管理的表具有以下特徵:
- 使用三個文件表示每個表:
- 格式文件 — 存儲表結構的定義(mytable.frm)
- 數據文件 — 存儲錶行的內容(mytable.MYD)
- 索引文件 — 存儲表上索引(mytable.MYI)
- 靈活的AUTO_INCREMENT字段處理
- 可被轉換爲壓縮、只讀表來節省空間
- 使用三個文件表示每個表:
2、InnoDB存儲引擎
- InnoDB存儲引擎是MySQL的缺省(默認)引擎。
- 它管理的表具有下列主要特徵:
- 每個InnoDB表在數據庫目錄中以.frm格式文件表示
- InnoDB表空間tablespace被用於存儲表的內容
- 提供一組用來記錄事務性活動的日誌文件
- 用COMMIT(提交)、SAVEPOINT及ROLLBACK(回滾)支持事務處理
- 提供全ACID兼容
- 在MySQL服務器崩潰後提供自動恢復
- 多版本(MVCC)和行級鎖定
- 支持外鍵及引用的完整性,包括級聯刪除和更新
3、MEMORY存儲引擎
- 使用MEMORY存儲引擎的表,其數據存儲在內存中,且行的長度固定,這兩個特點使得MEMORY存儲引擎非常快。
- MEMORY存儲引擎管理的表具有下列特徵:
- 在數據庫目錄內,每個表均以.frm格式的文件表示。
- 表數據及索引被存儲在內存中。
- 表級鎖機制。
- 不能包含TEXT或BLOB字段。
- MEMORY存儲引擎以前被稱爲HEAP引擎。
4、選擇合適的存儲引擎
- MyISAM表最適合於大量的數據讀而少量數據更新的混合操作。MyISAM表的另一種適用情形是使用壓縮的只讀表。
- 如果查詢中包含較多的數據更新操作,應使用InnoDB。其行級鎖機制和多版本的支持爲數據讀取和更新的混合操作提供了良好的併發機制。
可使用MEMORY存儲引擎來存儲非永久需要的數據,或者是能夠從基於磁盤的表中重新生成的數據。