1.mysql常用存儲的對比(引用mysql數據庫開發優化與管理維護一書的表格)
特點 | Myisam | BDB | Memory | InnoDB | NDB |
---|---|---|---|---|---|
存儲限制 | 沒有 | 沒有 | 有 | 64TB | 有 |
事務安全 | 支持 | 支持 | |||
鎖機制 | 表鎖 | 頁鎖 | 表鎖 | 行鎖 | 行鎖 |
B樹索引 | 支持 | 支持 | 支持 | 支持 | 支持 |
哈希索引 | 支持 | 支持 | 支持 | ||
全文索引 | 支持 | ||||
集羣索引 | 支持 | ||||
數據緩存 | 支持 | 支持 | 支持 | ||
索引緩存 | 支持 | 支持 | 支持 | 支持 | |
數據可壓縮 | 支持 | ||||
空間使用 | 低 | 低 | N/A | 高 | 低 |
內存使用 | 低 | 低 | 中等 | 高 | 高 |
批量插入的速度 | 高 | 高 | 高 | 低 | 高 |
支持外鍵 | 支持 |
MyISAM是Mysql默認的存儲引擎,MyISAM不支持事務,也不支持外鍵,優勢在於訪問速度快,對事物完整性沒有要求或者以SELECT INSERT爲主的應用基本採用這個引擎來建表。
MyISAM表是獨立於操作系統的,移植性比較強。每當我們建立一個MyISAM引擎的表時,就會在本地磁盤上建立三個文件,文件名就是表名。
1.tb_demo.frm,存儲表定義;
2.tb_demo.MYD,存儲數據;
3.tb_demo.MYI,存儲索引。
MyISAM存儲引擎特別適合在以下幾種情況下使用:
1.選擇密集型的表。MyISAM存儲引擎在篩選大量數據時非常迅速,這是它最突出的優點。
2.插入密集型的表。MyISAM的併發插入特性允許同時選擇和插入數據。例如:MyISAM存儲引擎很適合管理郵件或Web服務器日誌數據。
2.2 InnoDB
InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比Myisam的存儲引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁盤空間以保留數據和索引。
InnoDB主要使用環境:
1.用於事務處理應用程序,支持外鍵。
2.適用於對事務完整性要求高,在併發條件下要求數據的一致性。
3.數據操作主要包括插入 查詢 刪除 更新。
4.類似於計費和財務等系統對數據精準性要求比較高的系統。
2.3 MEMORY使用MySQL Memory存儲引擎的出發點是速度。爲得到最快的響應時間,採用的邏輯存儲介質是系統內存。雖然在內存中存儲表數據確實會提供很高的性能,但當mysqld守護進程崩潰時,所有的Memory數據都會丟失。獲得速度的同時也帶來了一些缺陷。它要求存儲在Memory數據表裏的數據使用的是長度不變的格式,這意味着不能使用BLOB和TEXT這樣的長度可變的數據類型,VARCHAR是一種長度可變的類型,但因爲它在MySQL內部當做長度固定不變的CHAR類型,所以可以使用。
一般在以下幾種情況下使用Memory存儲引擎:
1.目標數據較小,而且被非常頻繁地訪問。在內存中存放數據,所以會造成內存的使用,可以通過參數max_heap_table_size控制Memory表的大小,設置此參數,就可以限制Memory表的最大大小。
2.如果數據是臨時的,而且要求必須立即可用,那麼就可以存放在內存表中。
3.存儲在Memory表中的數據如果突然丟失,不會對應用服務產生實質的負面影響。
2.4 MERGEmerge用於將一系列等同的MyISAM表以邏輯方式組合在一起,並作爲一個對象引用它們。merge表的優點在於可以突破對單個MyISAM表大小的限制,並且通過將不同的表分佈在多個磁盤上,可以有效的改善merge表的訪問效率。這對於數據倉儲的VLDB環境十分適合。