面试常问之---说说你对mysql数据库引擎理解

 

数据库引擎

ISAM、MyISAM、HEAP(也称为MEMORY)、CSV、BLACKHOLE、ARCHIVE、PERFORMANCE_SCHEMA、InnoDB、
Berkeley、Merge、Federated和Cluster/NDB等。

 

上面的这些 说不全我觉得也没有关系,因为你只需要讲解你工作最常用的我觉得就差不多够了。一般面试官主要爱问MyISAM和InnoDB居多(我碰到的几个都是)。我总结记录的也是大多数问的关于MyISAM和InnoDB。

今天我们说一下面试最爱问的两种:MyISAM 和  InnoDB 

 

 MyISAM

该引擎基于ISAM数据库引擎,除了提供ISAM里所没有的索引和字段管理等大量功能,
MyISAM还使用一种表格锁定的机制来优化多个并发的读写操作
MyISAM:只支持表级锁,不支持行锁。
1.用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁 
读取时对需要读到的所有表加锁,写入时则对表加排他锁( 排他锁:用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。)
2.不支持事务
3.不支持外键
4.不支持崩溃后的安全恢复
5.在表有读取查询的同时,支持往表中插入新纪录
6.支持BLOB和TEXT的前500个字符索引,支持全文索引
7.支持延迟更新索引,极大地提升了写入性能
8.对于不会进行修改的表,支持 压缩表 ,极大地减少了磁盘空间的占用

 

InnoDB

1.该存储引擎为MySQL表提供了ACID事务支持、系统崩溃修复能力和多版本并发控制(即MVCC Multi-Version Concurrency Control)的行级锁;
2,该引擎支持自增长列,自增长列的值不能为空,如果在使用的时候为空则自动从现有值开始增值,如果有但是比现在的还大,则直接保存这个值; 
3.该引擎存储引擎支持外键,外键所在的表称为子表而所依赖的表称为父表。该引擎在5.5后的MySQL数据库中为默认存储引擎。
InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
4.支持行锁,采用MVCC来支持高并发,有可能死锁
5.支持事务
6.支持外键
7.支持崩溃后的安全恢复
8.不支持全文索引

 

什么叫表锁和行锁:


计算机(Mysql)协调多个进程或线程并发访问某一表或某行数据的机制。
表锁: 每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;
行锁: 每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度最高;

 

 

  总结:

MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 
在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。
如果需要事务支持,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以当该表写并发量较高时,要等待的查询就会很多了),这时选InnoDB是不错的。
如果你的数据量很大(MyISAM支持压缩特性可以减少磁盘的空间占用),而且不需要支持事务时,MyISAM是最好的选择。

 (所有数据是平时在网上资料或者书上总结记录整合的,时间较久,以备复习只用,若有些地方,涉及侵权,联系我删除!!!)

你可能感兴趣的:(面试点总结)