InnoDB 和 MyISAM 的比较?

InnoDB 和 MyISAM 的比较?

精简版:

  • InnoDB是Mysql默认的存储引擎,支持事务的原子性、一致性、隔离性和持久性。MyISAM不支持事务。
  • InnoDB支持外键,外键用于和别的表进行关联来保持数据的一致性。MyISAM不支持外键。
  • InnoDB支持行锁,可以在需要的数据行上加锁,而且采用了多版本并发控制,也就是MVCC来支持高并发,可以避免读写操作的相互阻塞。MyISAM不支持行锁,采用的是表锁,在对表进行查操作时会对表加上共享锁,在对表进行写操作时会对表加上排他锁,所以读写操作会相互阻塞,因此MyISAM存储引擎不适合在高并发的读写混合场景中使用。
  • InnoDB的数据和索引存放在一起,数据按照主键的逻辑顺序存储,一般用自增id来做主键,这样每次插入的新数据会顺序添加到当前索引节点的后续位置,形成一个紧凑的索引结构,近似顺序填满的,也不需要移动数据,所以不会增加很多开销在维护索引上。MyISAM的数据和索引分开存储,查找数据时先找到数据地址,然后根据数据地址去访问数据。
  • InnoDB有完备的崩溃恢复机制,而MyISAM在系统崩溃后难以恢复。
  • 根据前面所说的区别,InnoDB的使用场景是需要事务、读写操作比较多的场景。MyISAM的使用场景是不需要事务、读多写少的场景。



详细版:
InnoDB:(Mysql的存储引擎是怎么实现的?)

  1. InnoDB是Mysql默认的事务型存储引擎,支持事务的原子性、一致性、隔离性和持久性。(ACID)
  2. 支持行锁,只会在需要的数据行上加锁,而不会像MyISAM那样在整个表上加锁,所以大大增加了处理数据的并发能力。而且 InnoDB 采用了多版本并发控制,也就是MVCC来支持高并发,可以避免读写操作的相互阻塞。(实现了四种隔离级别,默认级别是可重复读,而且通过间隙锁策略防止幻读的出现,间隙锁不仅锁定查询涉及的行,还会锁定索引中的间隙,来防止幻影行的插入)
  3. InnoDB使用的是B+树作为索引结构,它的聚集索引的叶子节点存的是数据;它的非聚集索引的叶子节点,存的是主键值,因此在使用非聚集索引时,需要检索两次,第一次检索非聚集索引获得主键值,第二次根据主键值到主键索引中获得数据。(数据和索引存放在一起。数据按照主键的逻辑顺序存储,一般用自增列来做主键,这样每次插入的新数据会顺序添加到当前索引节点的后续位置,形成一个紧凑的索引结构,近似顺序填满的,也不需要移动数据,所以不会增加很多开销在维护索引上)
  4. 支持外键,外键用于和别的表进行关联来保持数据的一致性,比如A表中的一个字段,是B表的主键,那这个字段就是A表的外键。
  5. 使用场景: 需要事务、读写操作都比较多的场景。
    (支持B+树索引和自适应Hash索引,InnoDB 5.6后也支持了全文索引。自适应Hash索引的策略是当InnoDB注意到某些索引值被使用的非常频繁时,它会在内存中基于B+树索引之上再创建一个哈希索引,这样就让B+树索引也具有哈希索引的一些优点了,比如O(1)时间复杂度的快速哈希查找。全文索引是一种查找文本中关键词的索引)

MyISAM:
① MyISAM 不支持事务
② MyISAM不支持行锁,采用的是表锁,在对表进行查操作时会对表加上共享锁,在对表进行写操作时会对表加上排他锁,所以读写操作会相互阻塞,因此MyISAM存储引擎不适合在高并发的读写混合场景中使用。
③ MyISAM也是采用的B+树作为索引结构,但它的聚集索引和非聚集索引没有任何区别,叶子节点存放的都是key和key对应的数据地址。数据和索引分开存储。(查找数据时先找到数据地址,然后根据数据地址去访问数据)
不支持外键
⑤ 崩溃后难以恢复。
使用场景: 不需要事务、读多写少的场景(表锁)。
(对于 select count(*) from table,InnoDB较慢,因为会扫描全表;而MyISAM很快,因为它用一个变量保存了表的行数,只需要读取该变量即可)
(支持B+树索引,全文索引。而InnoDB 5.6才开始支持全文索引)
(以堆表的方式存储数据,所以存储的数据是没有顺序的,索引的叶子节点直接指向数据的物理地址,避免了查询中索引的二次查找,对它的查询性能会有一定的提高,单单从查询性能来看,MyISAM的查询性能会好于InnoDB的查询性能)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值