龙空技术网

MySQL面试题-MySQL常用的存储引擎有哪些?

幽默的程序员面试宝典 16743

前言:

今天同学们对“mysql查看数据库存储引擎的命令有哪些”大致比较关切,同学们都需要剖析一些“mysql查看数据库存储引擎的命令有哪些”的相关内容。那么小编也在网摘上网罗了一些关于“mysql查看数据库存储引擎的命令有哪些””的相关文章,希望你们能喜欢,朋友们快快来了解一下吧!

MySQL的有很多的存储引擎(也被称为是数据引擎)。所谓的存储引擎就是指存储、处理和保护数据的核心服务。从这里可以看出,存储引擎其实就是数据库底层的软件组织。在Mysql服务中可以通过 show engines 命令来查询数据库所有的存储引擎,如下图所示。

从图中我们可以看到我们常用的存储引擎有如下的几种

InnoDBMyISAMMEMORY

下面我们就来分别看看这三种数据库存引擎。

InnoDB存储引擎

InnoDB存储引擎是事务安全的MySQL存储引擎,在设计上采用了与Oracle类似的数据架构。通常来讲InnoDB存储引擎是OLTP应用中核心表的首选存储引擎。同时也正是因为有了InnoDB的出现,才让MySQL数据库变的更加有魅力。

InnoDB存储引擎支持事务操作,其特点就是行级锁、并且支持外键操作,支持类似于Oracle的非锁定读,也就是在默认读取情况下对于数据不会进行加锁操作。从MySQL5.5.8开始InnoDB存储引擎被设置为默认的存储引擎。

InnoDB存储引擎将数据放在一个逻辑空间中,这个空间就像是一个黑盒一样由InnoDB存储引擎自行管理。InnoDB存储引擎将表单独存放到一个相对独立的ibd文件中,除此之外,InnDB还支持用裸设备用来创建其表空间文件。

InnoDB通过使用多版本并发控制来获得高并发性能,并且实现了4种数据库隔离级别。默认为REPEATABLE 级别。同时,使用了next-key-locking的操作来避免幻读。此外InnoDB 存储引擎还提供插入缓冲、二次写、自适应哈希索引、预读等高性能高并发场景支持操作。

对于表数据存储,InnoDB采用了聚集的方式进行存储,也就是说在表中存储的数据都是按照主键的顺序进行存放,如果没有显式的指定主键,那么InnoDB会为每一行数据添加一个默认的主键。

MyISAM存储引擎

MyISAM存储引擎不支持事务,采用表锁设计,支持全文检索,其主要面向的是一些OLAP的数据库应用。

在MySQL5.5版本之前MyISAM作为MySQL关系型数据库的默认的存储引擎,它是从旧的ISAM代码中扩展了许多的功能,并且在新版本的MySQL数据库,InnoDB引擎对于MyISAM引擎对于事务、参照完整性,以及与高并发相关的优点进行了取代。

MyISAM存储引擎表是由MYD和MYI两个文件组成,MYD用来存放数据文件,MYI用来存放索引文件。可以通过使用myisampack工具来进行数据文件的压缩操作。

在MySQL5.0版本之前,MyISAM默认支持的表达小是4GB,如果需要支持大于4GB的MyISAM表的时候,需要定制MAX_ROWS和AVG_ROW_LENGTH属性。从MySQL5.0版本开始,MyISAM默认支持256TB的单表数据,这样的操作可以满足一般的应用需求。

Memory存储引擎

Memory存储引擎是将表中的数据放到了内存中,如果数据库重启或者发生宕机等,表中的数据就会消失。它非常适合于一些临时性的数据存储。Memory存储引擎默认使用哈希索引,而不是我们熟悉的B+树索引。

虽然Memory存储引擎速度非常快,这是由于其存储数据是基于内存进行存储的。但是在使用上还是有一些限制因素。例如对于表锁的支持,并发性能较差,而且在存储的数据类型中不支持大文本的存储。对于一些变长数据的存储也是采用了char类型存储,导致在进行变长数据存储扩容的时候有大量的性能上的损耗。

此外,对于MySQL数据库使用Memory存储引擎来进行临时数据存储的操作,如果存放的数据大于Memory的设置大小的时候,或者是在数据存储的过程中出现了大文本,MySQL会将其转换成MyISAM存储引擎表来进行存储。但是对于MyISAM来讲他不会缓存数据文件,所以产生临时表会对数据查询性能有一定的影响。

总结

当然除了以上的三种存储引擎来讲MySQL数据库中还有很多的存储引擎,但是作为在一般开发过程中常用的存储引擎,我们应当知道并且了解其一般特性。后续还会为大家带来关于数据库面试相关的内容,希望大家多多关注。

标签: #mysql查看数据库存储引擎的命令有哪些 #什么是存储引擎mysql常用的存储引擎有哪些 #mysql存储引擎面试题