MySQL之存儲引擎InnoDB,MyISAM和MEMORY

1、查看mysql支持的存儲引擎:
show engines;

   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       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

2、查看已有表的存儲引擎
show create table 表名;

mysql> show create table Vendors\G;
*************************** 1. row ***************************
       Table: Vendors
Create Table: CREATE TABLE `Vendors` (
  `vend_id` char(10) NOT NULL,
  `vend_name` char(50) NOT NULL,
  `vend_address` char(50) DEFAULT NULL,
  `vend_city` char(50) DEFAULT NULL,
  `vend_state` char(5) DEFAULT NULL,
  `vend_zip` char(10) DEFAULT NULL,
  `vend_country` char(50) DEFAULT NULL,
  PRIMARY KEY (`vend_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

3、創建表時可指定引擎
create table 表名(…)engine=MyISAM,charset=utf8,auto_increment=10000;

mysql> create table test(id int primary key,name varchar(60),sex varchar(10))engine=myisam,charset=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> show create table test;
  CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `name` varchar(60) DEFAULT NULL,
  `sex` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
1 row in set (0.00 sec)

4、修改已有表的引擎(幾乎不用)
alter table 表名 engine=InnoDB;

mysql> alter table test engine=innodb;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table test;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                  |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test  | CREATE TABLE `test` (
`id` int(11) NOT NULL,
`name` varchar(60) DEFAULT NULL,
`sex` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

5,InnoDB引擎

① 支持事務:支持4個事務隔離級別,支持多版本讀。
② 行級鎖定(更新時一般是鎖定當前行):通過索引實現,全表掃描仍然會是表鎖。
③讀寫阻塞與事務隔離級別相關。
④ 具有非常高效的緩存特性:能緩存索引,也能緩存數據。
⑤ 整個表和主鍵以Cluster方式存儲,組成一顆平衡樹。
⑥ 所有Secondary Index都會保存主鍵信息。
⑦ 支持分區,表空間,類似Oracle數據庫。
⑧ 支持外鍵約束,5.5以前不支持全文索引,之後版本支持了。
⑨ 和MyISAM相比對硬件資源要求比較高。
適合的業務場景:

  1. 需要事務支持的業務
  2. 行級鎖定對高併發有很好的適應能力,但需要確保查詢時通過索引完成。
  3. 讀寫及更新都很頻繁的場景
  4. 數據一致性要求較高的業務
  5. 硬件設備內存較大,可以利用InnoDB較好的緩存能力來提高內存利用率,儘可用減少磁盤I/O。

6,MyISAM引擎

① 不支持事務(事務是指邏輯上的一組操作,組成這組操作的各個單元,要麼全部成功要麼全部失敗)。
② 表級鎖定(更新時鎖整個表)
③ 讀寫互相阻塞:不僅會在寫入的時候阻塞讀取,MyISAM還會在讀取的時候阻塞寫入,但讀本身不會阻塞另外的讀。
④ 只會緩存索引:MyISAM可以通過key_buffer_size緩存索引,以大大提高訪問性能,減少磁盤I/O,但這個緩存區只會緩存索引,而不會緩存數據。
⑤ 讀取速度較快,佔用資源相對少。
⑥ 不支持外鍵約束,但支持全文索引。
⑦ 5.5.5前爲默認存儲引擎。
適合的業務場景:

  1. 不需要事務支持的業務
  2. 讀數據比較多的應用
  3. 數據庫修改較少的業務
  4. 對數據一致性要求不是非常高的業務
  5. 硬件資源比較差的機器可以用MyISAM

7,MEMORY引擎

基於哈希,存儲在內存中,用於臨時表
特點:
1、表記錄存儲在內存中,效率高
2、服務或主機重啓,表記錄清除

8,如何選擇存儲引擎總結

1、執行查(讀)操作多的表用 MyISAM(使用InnoDB浪費資源)
2、執行寫操作多的表用 InnoDB
3、臨時表用 : MEMORY

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章