在數據庫中存的就是一張張有着千絲萬縷關系的表,所以表設計的好壞,將直接影響整個數據庫。而在設計表的時候,我們都會關注一個問題,使用什么存儲引擎。
什么是存儲引擎?
關系數據庫是用於存儲和組織信息的數據結構,可以將表理解為由行和列組成的表格,類似於excel的電子表格的形式。有的表簡單,有的表復雜,有的表根本不用來存儲任何長期的數據,有的表讀取時非常快,但是插入數據時卻很差。而我們在實際開發過程中,就可能需要各種的表,不同的表,就意味着存儲不同類型的數據,數據處理上也會存在着差異。對於mysql來說,它提供了很多類型的存儲引擎,我們可以根據數據處理的需求,選擇不同的存儲引擎,從而最大限度的利用Mysql強大的功能。
特點 |
Myisam |
BDB |
Memory |
InnoDB |
Archive |
存儲限制 |
沒有 |
沒有 |
有 |
64TB |
沒有 |
事務安全 |
|
支持 |
|
支持 |
|
鎖機制 |
表鎖 |
頁鎖 |
表鎖 |
行鎖 |
行鎖 |
B樹索引 |
支持 |
支持 |
支持 |
支持 |
|
哈希索引 |
|
|
支持 |
支持 |
|
全文索引 |
支持 |
|
|
|
|
集群索引 |
|
|
|
支持 |
|
數據緩存 |
|
|
支持 |
支持 |
|
索引緩存 |
支持 |
|
支持 |
支持 |
|
數據可壓縮 |
支持 |
|
|
|
支持 |
空間使用 |
低 |
低 |
N/A |
高 |
非常低 |
內存使用 |
低 |
低 |
中等 |
高 |
低 |
批量插入的速度 |
高 |
高 |
高 |
低 |
非常高 |
支持外鍵 |
|
|
|
支持 |
|
在mysql客戶端中,使用以下命令可以查看Mysql支持的引擎。
SHOW ENGINES ;
MyISAM:當我們建立一個MyISAM引擎的表時,就會在本地磁盤上建立三個文件,文件名就是表名。例如,我建立一個MyISAM引擎的tb_Demo表,那么就會生成以下三個文件:
1、tb_Demo.frm,存儲表定義
2、tb_Demo.MYD,存儲數據
3、Tb_Demo.MYI,存儲索引
MyISAM表無法處理事務,這就意味着有事務處理需求的表,不能使用MyISAM存儲引擎。
MyISAM存儲引擎特別適合在以下幾種情況下使用:
1、選擇密集型的表:MyIASM存儲引擎在篩選大量數據時非常迅速,這是它最突出的有點。
2、插入密集型的表:MyISAM的並發插入特性允許同時選擇和插入數據。例如:MyISAM存儲引擎很適合管理右鍵或web服務器日志數據。
InnoDB是一個健壯的事務型存儲引擎,這種存儲引擎已經被很多互聯網公司使用,為用戶操作非常大的數據提供了一個強大的解決方案。我的電腦上安裝的MySQL5.6.17版,InnoDB就是作為默認的存儲引擎。InnoDB還引入了行級鎖定和外鍵約束,在以下場合下,使用InnoDB是最理想的選擇:
1、更新密集型的表:InnoDB存儲引擎特別適合處理多重並發的更新請求
2、事務:InnoDB存儲引擎是支持事務的標准MySQL存儲引擎
3、自動災難恢復:與其他存儲引擎不同,InnoDB表能夠自動從災難中恢復
4、外鍵約束:MySQL支持外鍵的存儲引擎只有InnoDB
5、支持自動更加列AUTO_INCREMENT屬性
一般來說,如果需要事務支持,丙炔有較高的並發讀取頻率,InnoDB是不錯的選擇。