欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MyISAM VS InnoDB MySQL存储引擎的选择

程序员文章站 2024-01-25 08:15:10
...

大多数面试的人都比较喜欢问的问题。 说说 MySQL存储引擎的选择。 MySQL的存储引擎太多了, 比较有名的都有七八个, 具体哪些就不一一列出来了, 最常用的只有两种, 如题, 就是 MyISAM 和 InnoDb. 我们从两个方面来讲一下 MyISAM和 InnoDB 的区别, 功能方

大多数面试的人都比较喜欢问的问题。

说说 MySQL存储引擎的选择。 MySQL的存储引擎太多了, 比较有名的都有七八个, 具体哪些就不一一列出来了, 最常用的只有两种, 如题, 就是 MyISAM 和 InnoDb. 我们从两个方面来讲一下 MyISAM和 InnoDB 的区别, 功能方面和性能方面, 先实现功能再追求性能!

功能部分

  1. InnoDB 支持事务, MyISAM不支持。 虽说 MyiSAM下边也可以 set autocommit =0 ; 但是修改数据是直接写磁盘的!
  2. InnoDB 支持外键, MyISAM不支持。
  3. MyISAM 支持全文索引(Fulltext Index) , InnoDB 不支持。

性能部分

跟性能相关的最重要的区别就是 MyISAM 和 InnoDB 实现的锁机制不一样! MyISAM 使用的是表锁, 而 InnoDB实现的是行锁。

我也装逼一下, 先介绍一下锁。 在多个线程同时操作一张表里的某条数据的时候, 有人读有人写 这样不是一团糟了。 所以要操作之前先把资源给锁起来, 在你操作的过程中别人不的过来干涉。 锁分为两种, 一种是读锁, 在读的时候不允许其他线程写, 允许其他的线程同时读, 还有一种是写锁, 在操作的时候不允许其他的线程读写。

MyISAM跟InnoDB不同的是, MyISAM 锁的是整张表, 而InnoDB是锁定的要操作的行, 相比MyISAM来说 InnoDB 还要多出来一步操作就是先要找到目标行, 增加了复杂度和操作时间, 但是也高并发, 因为只锁定要操作的行, 所以可以多个线程同时操作(只要不操作其他线程已经锁定的行)。

OK, 下结论的时候到了: 对于主要是Insert和select操作的表选择MyISAM存储引擎, 对频繁更新对并发性要求比较高的数据表采用InnoDB存储引擎会更好一些

了解了上边的这么多面试应该没什么大的问题了, 但是锁的机制远远是没有这么简单的, 尤其是InnoDB存储引擎的锁机制, 还要跟事务牵扯到一起, 比较复杂, 这里就不再多说, 敬请继续关注我的博客: http://www.phpv5.com

声明: 本文采用 CC BY-NC-SA 3.0 协议进行授权

转载请注明来源:小景的博客

本文链接地址:http://www.phpv5.com/blog/archives/259/