MySQL使用各种不同的技术把数据存储在文件中。这些技术称为存储引擎。这些存储引擎具有不同的功能和能力(存储机制、索引技巧、锁定水平等)。MyISAM虽然理论上可以存储更多的数据,但是它的功能比InnoDB少了很多。
MyISAM 存储引擎
引擎特点:
- 不支持事务
- 表级锁定
- 读写相互阻塞,写入不能读,读时不能写
- 只缓存索引
- 不支持外键约束
- 不支持聚簇索引
- 读取数据较快,占用资源较少
- 不支持MVCC(多版本并发控制机制)高并发
- 崩溃恢复性较差
- MySQL5.5.5 前默认的数据库引擎
适用场景:
- 只读(或者写较少)
- 表较小(可以接受长时间进行修复操作)
引擎文件:
- tbl_name.frm 表格式定义
- tbl_name.MYD 数据文件
- tbl_name.MYI 索引文件
InnoDB 引擎
引擎特点:
- 支持事务,适合处理大量短期事务
- 行级锁
- 读写阻塞与事务隔离级别相关
- 可缓存数据和索引
- 支持外键
- 支持聚簇索引
- 崩溃恢复性更好
- 支持MVCC高并发
- 从MySQL5.5后支持全文索引
- 从MySQL5.5.5开始为默认的数据库引擎
引擎文件:
- tb_name.ibd(表的数据和索引存储在一起)
管理存储引擎
查看mysql支持的存储引擎:
show engines;
查看当前默认的存储引擎:
show variables like '%storage_engine%';
配置文件设置默认的存储引擎:
default_storage_engine= InnoDB
查看库中所有表使用的存储引擎:
show table status from db_name;
查看库中指定表的存储引擎:
show table status like 'tb_name';
show create table tb_name;
设置表的存储引擎:
CREATE TABLE tb_name(... ) ENGINE=InnoDB;
ALTER TABLE tb_name ENGINE=InnoDB;