查看存儲引擎
查看當前mysql所支持的所有存儲引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set
查看當前默認的存儲引擎
mysql> show variables like '%storage_engine%';
+----------------------------------+--------+
| Variable_name | Value |
+----------------------------------+--------+
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_disk_storage_engine | InnoDB |
+----------------------------------+--------+
4 rows in set
查看每個數(shù)據(jù)庫的數(shù)據(jù)文件存放地址:
mysql> show variables like '%datadir%';
+---------------+---------------------------------------------+
| Variable_name | Value |
+---------------+---------------------------------------------+
| datadir | C:\ProgramData\MySQL\MySQL Server 5.7\Data\ |
+---------------+---------------------------------------------+
1 row in set
Mysql 存儲引擎
Mysql 存儲引擎是基于表的,而不是數(shù)據(jù)庫纠拔,所以一個數(shù)據(jù)庫實例惜索,不同的表,我們可以根據(jù)存儲數(shù)據(jù)的性質(zhì)而選擇不同的存儲引擎。
系統(tǒng)表空間和獨立表空間:
- 系統(tǒng)表空間無法簡單的收縮文件大小,并且會產(chǎn)生IO瓶頸
- 獨立表空間可以通過
optimize table
收縮系統(tǒng)文件,可以同時向多個文件刷新數(shù)據(jù)
InnoDB存儲引擎
InnoDB存儲引擎洲愤,是由*.frm文件和*.ibd文件組成,frm用來存放表結(jié)構(gòu)顷锰,ibd文件用來存放表的索引和數(shù)據(jù)柬赐。
主要關(guān)注點是事務。
特性
支持事務官紫,行級鎖和表級鎖肛宋,外鍵,非鎖定讀(MVCC)和獨立表空間束世,使用聚集索引酝陈。
使用場景
Innodb適合于大多數(shù)需要在線事務處理(OLTP)的應用。
MyISAM存儲引擎
MyISAM存儲引擎表由*.MYD毁涉、*.MYI和*.frm文件組成沉帮,MYD用來存放數(shù)據(jù)文件,MYI用來存放索引文件,frm用來存放表結(jié)構(gòu)穆壕。
主要關(guān)注點是性能待牵。
特性
不支持事務、行級鎖和外鍵喇勋;支持表級鎖洲敢,全文檢索、數(shù)據(jù)壓縮和空間計算函數(shù)茄蚯;使用獨立表空間,非聚集索引睦优。
使用場景
非事務型應用渗常,如:數(shù)據(jù)日志。
空間類應用汗盘,如:地圖皱碘。
讀多寫少場景。
Memory存儲引擎
Memory存儲引擎將表中的數(shù)據(jù)存放在內(nèi)存中隐孽,如果數(shù)據(jù)庫重啟或發(fā)生崩潰癌椿,表中的數(shù)據(jù)都將消失。
特性
- Memory 默認使用哈希索引菱阵,而不是我們熟悉的B+樹索引踢俄;
- 只支持表鎖,并且不支持
TEXT
和BLOB
列類型晴及; - 存儲變長字段(varchar)時是按照定常字段(char)的方式進行的都办,因此會浪費內(nèi)存;
如果臨時表的數(shù)據(jù)量大于Memory存儲引擎的最大值或者臨時表中有
TEXT
和BLOB
字段時虑稼,臨時表會使用MyISAM存儲引擎琳钉。
最大大小由max_heap_table_size
參數(shù)決定。
mysql> show variables like '%max_heap_table_size%';
+---------------------+----------+
| Variable_name | Value |
+---------------------+----------+
| max_heap_table_size | 16777216 |
+---------------------+----------+
1 row in set
使用場景
臨時表
Archive存儲引擎
Archive存儲引擎使用行鎖來實現(xiàn)高并發(fā)的插入操作蛛倦,但是其本身并不是事務安全的存儲引擎歌懒,其設計目標主要是提供高速的插入和壓縮功能。
特性
- Archive存儲引擎只支持
INSERT
和SELECT
操作溯壶。 - 使用zlib算法將數(shù)據(jù)行(row)進行壓縮后存儲及皂,壓縮比一般可達1∶10。
- 支持行級鎖茸塞,但是不支持事務躲庄。
使用場景
Archive存儲引擎非常適合存儲歸檔數(shù)據(jù),如日志信息钾虐。
Federated存儲引擎
Federated存儲引擎表并不存放數(shù)據(jù)噪窘,它只是指向一臺遠程MySQL數(shù)據(jù)庫服務器上的表。
mysql://user_name[:password]@hostname[:port_num]/db_name/table_name
存儲引擎對比
存儲引擎只需要記住MyISAM和InnoDB就行了:
對比項 | MyISAM | InnoDB |
---|---|---|
主外鍵 | 不支持 | 支持 |
事務 | 不支持 | 支持 |
行表鎖 | 表鎖,即使操作一條記錄也會鎖住整個表不適合高并發(fā)的操作 | 行鎖,操作時只鎖某一行倔监,不對其它行有影響適合高并發(fā)的操作 |
緩存 | 只緩存索引直砂,不緩存真實數(shù)據(jù) | 不僅緩存索引還要緩存真實數(shù)據(jù),對內(nèi)存要求較高浩习,而且內(nèi)存大小對性能有決定性的影響 |
表空間 | 系統(tǒng)表空間 | 支持系統(tǒng)表空間和獨立表空間 |
關(guān)注點 | 性能 | 事務 |