数据库引擎:
数据库引擎顾名思义就是通过对数据、索引的存储,定义不同的存储方式,来保证在不同场景下,能够有效率的获取到数据
InnoDB(目标为处理大容量数据库系统):
事务性引擎,具有事务性(提供了对ACID事务的支持),外键,行级锁。
MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。
不支持FULLTEXT类型的索引,而且没有存储整个表中的行数,所以select count(*) 需要全局扫描表
因为具有MVCC的行级锁的特性,在查询的时候,能够不锁定整个表,所以在并发较高时,使用Innodb引擎会提升效率。但是如果在查询的时候没有指定具体的扫描范围,没有明确主键,那么查询还是会锁住全表。
适用场景:
1:需要事务操作
2:经常需要更新操作的表:
3:外键约束。只有他支持外键
4:支持自动增加列属性auto_increment
5:需要断电恢复的
补充:什么叫事务?简称ACID
Atomic(原子性):要么执行要么不执行,即报错了可以进行回滚。当做没调用一样
Consistency(一致性):完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变.
Isolation(隔离性):两个事务不会进行交错执行的状态
Duration(持久性):事务成功后,结果会永远保存
MyIsam():
独立于操作系统,可以进行数据的迁移,例如从window迁移到linux
会创建三个文件,一个是.frm文件用于存储表的定义,一个是.MYD文件用于存储表的数据,另一个是.MYI文件用来存储索引文件
不具有外键,不具有实务,表级锁,查询更新会锁定整个表
不具有恢复功能。
适用场景:
不支持事务的设计,但是并不代表着有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制
高负载的select