试官常常会问到如何选择MyISAM和Innodb,这其实是个早期DBA的问题,但是现在在事实上早已经不存在这个问题了,Innodb不断完善,从各个赶超了MyISAM,成为了MySQL默认的存储引擎。
相关差异
锁差异
MyISAM中是不会产死锁的,因为MyISAM总是次性获得所需的全部锁,要么全部满,要么全部等待MyISAM因为是表锁,只有读读之间是并发的,写写之间和读写之间是串的。在InnoDB中,锁是逐步获得的,就造成了死锁的可能;Innodb的级锁不是直接锁记录,而是锁索引,即行锁是锁索引的,如果没有索引,InnoDB也会锁表;MyISAM和InnoDB的B+树索引实现机制不样:
MyISAM使前缀压缩技术使得索引变得更,但InnoDB则按照原数据格式进存储;MyISAM索引通过数据的物理位置引出被索引的,但InnoDB则根据主键引被索引的;即MyISAM索引件和数据件是分离的,但是InnoDB主键索引的key就是数据表的主键,data就是表中的数据。MyISAM的级索引和主索引结构没有区别,但是级索引的key可以不唯;InnoDB级索引data域存储相应记录主键的值不是地址;对于InnoDB来说,其主键尽量使MySQL带的与业务关的增主键;MyISAM引擎把个表的总数存在了磁盘上,因此执count(*)的时候会直接返回这个数,效率很;InnoDB引擎就麻烦了,它执count(*)的时候,需要把数据地从引擎读出来,然后累积计数,这是因为InnoDB的MVCC;
MyISAM的般查询效率InnoDB,但是InnoDB的主键索引查询除外
InnoDB独有redolog,但MyISAM之后binlog。
如何选择
默认InnodbMyISAM:以读为主的应程序,如博客系统、新闻户站Innodb:更新(删除)操作频率也,或者要保证数据的完整性;并发量,持事务和外键保证数据完整性。如OA动化办公系统。以上就是小科今天整理提供的MySQL面试题,你记住并理解了吗?希望以上的内容能够为学习C++、MySQL的同学提供了有用的面试素材及学习素材,以后小科每日均会提供MySQL、Python及Web相关的习题,赶快学习起来吧。