数据引擎
数据库引擎是数据库用于存储、处理和保护数据的核心服务,不同的数据库引擎有其各自的特点,如存储机制、索引技巧、主键的处理、锁的粒度等特点便随着引擎的不同而变化。因此,针对自己项目特点选择合适的数据库引擎可以改善服务器端存储性能。 engine=innodb MyISAM
例如:create table t_users(......) engine=innodb default charset utf8;
SHOW ENGINES 命令来查看 MySQL 使用的引擎
在 MySQL 中不需要在整个服务器中使用同一种存储引擎,针对具体的要求,
可以对每一个表使用不同的存储引擎
support 列的值表示某种引擎是否能使用:YES 表示可以使用、NO 表示不能使
用、DEFAULT 表示该引擎为当前默认的存储引擎
简单理解:存储引擎就是把数据存储到磁盘上的规则,数据的存储方式,针对表
一个命令的基本执行过程:
1、服务端开启,客户端连接服务端的接口,进入连接池(包括权限、线程、连接限制)
2、客户端发送指令给 mysql 的服务端3、服务端接收到这个指令,解析成对应的底层操作,然后解析器解析接受到的指令,进行操作,然后优化(包括查询速度加快等)
4、解析完后,要去磁盘中拿数据,在这个过程中要经过存储引擎
5、找自己指定的存储引擎,然后进入磁盘文件系统,在发送给客户端
InnoDB 存储引擎
InnoDB 是一个事务型存储引擎,提供了对数据库 ACID 事务的支持,并实现了 SQL 标准的四种隔离级别,具有行级锁定(这一点说明锁的粒度小,在写数据时,不需要锁住整个表,因此适用于高并发情形)及外键支持(所有数据库引擎中独一份,仅有它支持外键)
支持事务:
支持 4 个事务隔离界别,支持多版本读行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响支持外键约束,不支持全文索引(5.5 之前),以后的都支持了
InnoDB 缺点
- 该引擎不支持 FULLTEXT 类型的索引
- 没有保存表的行数,在执行 select count(*) from 表名时,需要遍历扫描全表
InnoDB 适合
- 可靠性要求比较高或者要求事务,适合处理多重并发的更新请求
- 支持事务和外键约束
- 表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建
- 可以从灾难中恢复(通过 bin-log 日志等)
- 支持自动增加列属性 auto_increment
MyISAM 存储引擎
MyISAM 基于 ISAM 存储引擎,并对其进行扩展。它是在 Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM 拥有较高的插入、查询速度,但不支持事务。MyIsam 引擎是 MySQL 主流引擎之一,但它相比起 InnoDB,没有提供对数据库事务的支持,不支持细粒度的锁(行锁)及外键,当表 Insert 与 update 时需要锁定整个表,因此效率会低一些,在高并发时可能会遇到瓶颈,但 MyIsam 引擎独立于操作系统,可以在 windows 及 linux 上使用。
MyISAM 引擎是 MySQL5.5 版本之前的默认引擎,是对最初的 ISAM 引擎优化的产物。
MyISAM 缺点
- 不能在表损坏后恢复数据
MyISAM 适合
- 极度强调快速读取
- 表中自动存储了表的行数,需要时直接获取即可,即支持快速 count(*)操作
- 插入不频繁,查询非常频繁
- 没有事务、外键功能及需要对整个表加锁的情形