目录
存储引擎
什么是存储引擎呢?
存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
有哪些存储引擎
有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 :性能优先 (表锁) ,适合读密集的表