MySQL儲存引擎 - MyISAM與InnoDB的優劣
阿新 • • 發佈:2018-11-13
目錄
一、MyISAM 與 InnoDB 的異同
特性對比表格
特點 | MyISAM | InnoDB |
---|---|---|
儲存限制 | 有 | 64TB |
事務安全 | 支援 | |
鎖機制 | 表鎖 | 行鎖 |
B樹索引 | 支援 | 支援 |
雜湊索引 | ||
全文索引 | 支援 | |
叢集索引 | 支援 | |
資料快取 | 支援 | |
索引快取 | 支援 | 支援 |
資料可壓縮 | 支援 | |
空間使用 | 低 | 高 |
記憶體使用 | 低 | 高 |
批量插入速度 | 高 | 低 |
支援外來鍵 | 支援 |
二、MyISAM的特性
1. 優勢
訪問速度快,適用於不需要做事務、以讀資料和插資料為主的業務
2.儲存方式
- 表結構:.frm
- 資料:.MYD
- 索引:.MYI
預設儲存在同一路徑下,可在建表時通過
DATA DIRECTORY
和INDEX DIRECTORY
設定資料和索引的儲存位置(需要絕對路徑)
3.儲存格式
- 靜態(固定長度表)表
MyISAM預設儲存格式,所有欄位為非變長欄位,所有記錄長度固定
優點:儲存快、易快取、易恢復
缺點:佔用空間大(注:靜態表中資料後邊的空格會被去掉)
- 動態表
表中包含變長欄位
優點:佔用空間少
缺點:故障不易恢復、頻繁的更新和刪除會產生碎片需要定期執行
OPTIMIZE TABLE
語句或myismchk-r
命令來改善效能 - 壓縮表
由myisampack工具建立,佔用空間非常小,每個記錄單獨壓縮,只有非常小的訪問開支
三、InnoDB的特性
1. 優勢
支援事務、外來鍵約束、行級鎖
2.自增列
自增列必須是索引,如果是聯合索引則必須在第一位
MyISAM的自增列可以位於聯合索引的任一位置,根據前邊的幾列完成自增
3.外來鍵約束
InnoDB是目前唯一支援外來鍵約束的MySQL引擎
在建立外來鍵時,要求父表必須有對應的索引,子表在建立外來鍵的時候也會自動建立對應的索引
在建立索引時可以指定在刪除、更新父表時,對子表進行的操作:
RESTRICT
、NO ACTION
:在子表存在記錄時,父表不能更新CASCADE
:在父表更新或刪除時,同時更新或刪除子表對應記錄SET NULL
:父表更新或刪除時,子表對應記錄被置為NULL
4.儲存方式
- 共享表空間儲存
表結構:.frm
索引+資料:.innodb_data_home_dir和innodb_data_file_path定義的表空間為了均衡IO,可以是多個檔案(為了均衡負載)
- 多表空間儲存
表結構:.frm
索引+資料:.ibd每個表的資料和索引單獨儲存在.ibd中
如果是分割槽表,則每個分割槽對應單獨的.ibd檔案,檔名是表名+分割槽名,可以在建立分割槽時指定每個分割槽的資料檔案位置,均衡負載
四、總結
1.MyISAM
- 預設的MySQL外掛式儲存引擎
- 適合不需要事務以及以讀和插入為主的業務
- 在web和資料倉庫中常用
2.InnoDB
- 支援事務和外來鍵
- 對事務完整性有要求,在併發條件下要求資料一致性,有更多的更新和刪除操作的業務(行級鎖優勢),適合使用InnoDB
- 在計費、財務系統常用
五、相關話題
- MySQL鎖
- 索引的實現原理及資料結構