mysql學習與提高2:mysql儲存引擎
阿新 • • 發佈:2018-11-07
目錄
儲存引擎
什麼是儲存引擎呢?
儲存引擎說白了就是如何儲存資料、如何為儲存的資料建立索引和如何更新、查詢資料等技術的實現方法。
有哪些儲存引擎
有MyISAM、InnoDB、CSV、Archive、Memory、Federated等儲存引擎,因為後面四種用的較少,我們主要掌握MyISAM和InnoDB這兩種儲存引擎。
如何檢視儲存引擎
1.檢視所有引擎
show ENGINES
根據查詢結果我們可以看到,InnoDB是mysql預設的儲存引擎
2.檢視當前使用的引擎
show variables like '%storage_engine%'
3.指定資料庫物件的儲存引擎
create table tb(
id int(4) auto_increment ,
name varchar(5),
dept varchar(5) ,
primary key(id)
)ENGINE=MyISAM AUTO_INCREMENT=1
DEFAULT CHARSET=utf8
InnoDB
MySQL 5.5 及之後版本的預設儲存引擎
特性
- InnoDB為事務性儲存引擎
- 完全支援事物的 ACID 特性
- Redo log (實現事務的永續性) 和 Undo log(為了實現事務的原子性,儲存未完成事務log,用於回滾)
- InnoDB支援行級鎖
- 行級鎖可以最大程度的支援併發
- 行級鎖是由儲存引擎層實現的
應用場景
- 可靠性要求比較高,或者要求事務
- 表更新和查詢都相當的頻繁,並且行鎖定的機會比較大的情況
MyISAM
MySQL 5.5 版本之前的預設儲存引擎,在 5.0
以前最大表儲存空間最大 4G
,5.0
以後最大 256TB
。
Myisam 儲存引擎由 .myd
(資料)和 .myi
.frm
檔案儲存表結構(所以儲存引擎都有)
特性
- 併發性和鎖級別 (對於讀寫混合的操作不好,為表級鎖,寫入和讀互斥)
- 表損壞修復
- Myisam 表支援的索引型別(全文索引)
- Myisam 支援表壓縮(壓縮後,此表為只讀,不可以寫入。使用 myisampack 壓縮)
應用場景
- 沒有事務
- 只讀類應用(插入不頻繁,查詢非常頻繁)
- 空間類應用(唯一支援空間函式的引擎)
- 做很多 count 的計算
MyISAM 與InnoDB比較
MyISAM | InnoDB | |
儲存檔案 | .frm 表定義檔案 .myd 資料檔案 .myi 索引檔案 |
.frm 表定義檔案 .ibd 資料檔案 |
鎖 | 表鎖 | 表鎖、行鎖 |
事務 | 不支援 | ACID |
外來鍵 | 不支援 | 支援 |
線上熱備份 | 不支援 | 支援 |
crud | 大量select效能更佳 | insert和update多效能更加 |
count操作 | 快取了表的總行數,直接返回 | 需要掃表 |
總結
本文主要介紹了兩種儲存引擎
InnoDB(預設) :事務優先 (適合高併發操作;行鎖),適合寫密集的表。
MyISAM :效能優先 (表鎖) ,適合讀密集的表