java面试一日一题:mysql中常用的存储引擎有哪些?
问题:请讲下mysql中常用的引擎有哪些?
分析:该问题主要考察对mysql存储引擎的理解,及区别是什么?
回答要点:
主要从以下几点去考虑,
1、mysql的存储引擎的基本概念?
2、mysql中常用的存储引擎有哪些及各自的区别是什么?
从上篇《java面试一日一题:请讲下对mysql的理解》已经知道了mysql从整体架构上分为两部分,一部分是server层,另外一部分是存储引擎层。说的简单点存储引擎就是用来实际管理mysql中的数据,为了适用于不同的场景有了不同的存储引擎。比较常用的存储引擎有myIsam和Innodb两种。
myIsam
myIsam不支持事务;
myIsam不支持外键;
myIsam的索引是非聚集索引,索引和数据是分开的;
myIsam使用一个变量保存了表中的数据总行数
myIsam支持表锁;
myIsam支持全文索引;
Innodb
innodb支持事务,事务的实现依靠redo log、undo log、锁、MVCC等技术;
inndo是聚集索引,主键索引和数据是在一起的;
innod没有保存数据的总行数;
innodb支持表、行锁,默认是行锁;
innodb不支持全文索引,在5.7以后的版本才支持全文索引;
本文简单的从一个面试过程中常见的面试题入手,讲解了mysql的myIsam和Innodb两种存储引擎的区别。其实从上面的回答中面试官可以引申出很多问题,例如,
1、什么是聚集、非聚集索引;
2、mysql的索引数据结构是什么样子的,为什么使用B+树;
3、什么是redo log、undo log
4、什么是MVCC;
5、事务的特性有哪些;
简单列举下由本题引申的面试点,后面会统一总结。