对MyISAM与InnoDB这两个数据库引擎的思考

大耗子 2020年06月03日 195次浏览

文章链接:https://codemouse.online/archives/2020-06-03221206

MyISAM用的是表级锁
InnoDB用的是行级锁

  • 事务是如何实现的?
    通过建立一个临时表(undolog),所有的操作都存放在临时表中,当事务确定的时候,才将临时表的内容写入到原来的表中。而回滚操作也就是丢弃这个临时表,原先表保持不变,也就是回滚了。

  • 为什么InnoDB支持事务而MyISAM不支持?
    因为MyISAM用的是表级锁,如果用了两条数据,表被锁住了,第二条数据无法修改变动。

  • InnoDB与MyISAM有什么区别?
    区别在于,InnoDB查表的时候,将数据存放在叶子节点中,而MyISAM的叶子节点存放的是一个索引,通过这个索引去磁盘中获取数据。

  • 速度方面有何区别?
    少量搜索的时候MyISAM更占优势一点,因为叶子节点上存储的是索引,一开始不用预先加载太多的资源,但是大量搜索的时候,因为每获取一条数据,他都要去磁盘获取一次,特别消耗时间。而Innodb是由于数据已经在内存中加载好了,获取特别的快。

  • 为什么Innodb不支持全文索引,而MyISAM支持全文索引?
    因为Innodb会将数据全加载了,这样会特别消耗内存,而MyISAM只是加载了一个索引,消耗内存不大。例如博客系统,如果查询的话,使用Innodb就会将大量文章都加载,会消耗大量的内存。加上叶子结点本身不适合大量数据的存储。