面试官:你用过mysql哪些存储引擎,请分别展开介绍一下

 

 

这是高级开发者面试时常常被问的问题。实际咱们在平时的开发中,常常会遇到的,在用SQLyog等工具建立表时,就有一个引擎项要你去选。以下图:mysql

Mysql的存储引擎有这么多种,实际咱们在平时用的最多的莫过于InnoDB和MyISAM了。面试

全部若是面试官问道mysql有哪些存储引擎,你只须要告诉这两个经常使用的就行。sql

那他们都有什么特色和区别呢?

MyISAM和InnoDB的特色:

MyISAM :默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,并且不支持外键,若是执行大量的select,insert MyISAM比较适合。安全

InnoDB :支持事务安全的引擎,支持外键、行锁、事务是他的最大特色。若是有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的状况。注: 在MySQL 5.5以前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5以后的版本中,默认的搜索引擎变动为InnoDB。并发

MyISAM和InnoDB的区别:

  1. InnoDB支持事务,MyISAM不支持。对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,因此最好把多条SQL语言放在begin和commit之间,组成一个事务;
  2. InnoDB支持外键,而MyISAM不支持。
  3. InnoDB是汇集索引,使用B+Tree做为索引结构,数据文件是和(主键)索引绑在一块儿的(表数据文件自己就是按B+Tree组织的一个索引结构),必需要有主键,经过主键索引效率很高。MyISAM是非汇集索引,也是使用B+Tree做为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
  4. InnoDB不保存表的具体行数,执行select count(*) from table时须要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只须要读出该变量便可,速度很快。
  5. Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;5.7之后的InnoDB支持全文索引了。
  6. InnoDB支持表、行级锁(默认),而MyISAM支持表级锁。
  7. InnoDB表必须有主键(用户没有指定的话会本身找或生产一个主键),而Myisam能够没有。
  8. Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI。

Innodb:frm是表定义文件,ibd是数据文件。工具

Myisam:frm是表定义文件,myd是数据文件,myi是索引文件。搜索引擎

最后:

本次分享就到这里,相信经过上面的文章,你已经对InnoDB和MyISAM有一个基本的认识了,可是你仅仅知道这一些是不够的,在接下来的一段时间里,我会继续在个人公众号:Java技术zhai 总结一些面试中的问题共享给你们。指针

相关文章
相关标签/搜索