mysql数据库引擎常用面试总结

Mysql 四种存储引擎

存储引擎的查看 SHOW ENGINES

mysql数据库引擎常用面试总结_第1张图片

MyISAM引擎

基于ISAM存储引擎,并对其进行了扩展。是mysql的默认数据库引擎

  1. 不支持事务处理,行级锁,外键,但是是唯一支持表压缩全文索引的存储引擎。插入和更改表的效率较为低下(默认是锁定整张表),但是区别于 InnoDB,MyIASM中存储了表的行数,所以SELECT*时只需要直接读取已经存好的值而不需要全表扫描。
  2. MyISAM更强调快速的读取(适合不关心事务处理)
  3. 当删除和更新插入操作混合使用时,动态尺寸的行产生更少的碎片(通过合并相邻被删除的块,以及如果下一个块被删除,就扩展到下一个块)
  4. 每个表的最大索引说为64(可以通过重新编译修改),每个索引的最大列数为16,键最大长度1000字节
  5. 支持表压缩,所有数字键值以高字节优先被存储以允许一个更高的索引压缩
  6. 数据文件和索引文件可以存储在不同目录
  7. 使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,扩展名之处文件类型:frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名时.MYI(MYIndex)

E.G:大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据
优点:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。

InnoDB引擎(事务型)

  1. 拥有MyISAM没有的事务处理操作
    事务处理:提交,回归,崩溃处理
  2. 支持外键操作
  3. 支持行级锁。由于锁粒度小,写操作不会锁定全表,并发较高的情况下,效率提升。(缺点:如果执行全表扫描,由于行级锁不能确定扫描的范围,必须锁定全表
  4. **InnoDB是为处理巨大数据量的最大性能设计。**它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的
  5. 本身是基于MySQL后台的完整数据库系统MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件)。这与MyISAM表不同,比如在MyISAM表中每个表被存放在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上
  6. InnoDB被用在众多需要高性能的大型数据库站点上
  7. InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件

总结:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

MEMORY存储引擎

MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问

  1. MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度
  2. 使用固定的记录长度格式
  3. Memory表在所有客户端之间共享
  4. MEMORY使用存储在内存中的内容来创建表,而且数据全部放在内存中。这些特性与前面的两个很不同。表内存被存储在内存中,内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部表共享
  5. MEMORY默认使用哈希索引。速度比使用B型树索引快。

Memory表存储在RAM中,可以提供极快的访问,但是基于MEMORY的表的生命周期很短,一般是一次性的。不常用,由于数据存储在内存,如果内存出现问题,会直接影响表性能。

mysql数据库引擎常用面试总结: https://blog.csdn.net/sjyttkl/article/details/76176836
Mysql常用的三种数据库引擎比较:https://blog.csdn.net/t146lla128xx0x/article/details/78737290
剖析Mysql的InnoDB索引:https://blog.csdn.net/voidccc/article/details/40077329
四种常见的数据库引擎:https://www.jianshu.com/p/4bb9f78b4f6d

如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择
如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果
如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive
使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性

你可能感兴趣的:(数据库)