InnoDB和MyIASM储存引擎的区别

来源:互联网 发布:小程序源码 百度网盘 编辑:程序博客网 时间:2024/06/10 21:51

InnoDB引擎

  1. InnoDB引擎提供了对数据库ACID事务的支持
  2. 提供了行级锁和外键约束
  3. 不支持FULLTEXT类型的索引(全文索引);
  4. 没有保存表的行数,因此当SELECT COUNT(*) FROM TABLE时需要扫描全表;
  5. InnoDB要求表必须要有主键,如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键(这个字段长度为6个字节,类型为长整形)。

MyIASM引擎

  1. 不提供对数据库事务的支持,也不支持外键和行级锁
  2. 使用表级锁,所以写操作需要锁定整个表;
  3. 支持FULLTEXT类型的索引(全文索引);
  4. MyIASM中存储了表的行数,所以当SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描;
  5. 表不一定要有主键。

两种引擎的选择

选择InnoDB引擎: 
1. 需要事务和外键支持; 
2. 由于锁粒度更小,写操作一般不会锁定整个表,所以在高并发的情况下,使用InnoDB引擎会提升效率;但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,那么InnoDB同样会锁全表;(例如:模糊查询like ‘%a’) 
3. 数据的大小。大尺寸的数据集趋向于选择InnoDB引擎,因为它支持事务处理和故障恢复。数据库的大小决定了故障恢复的时间长短,InnoDB可以利用事务日志进行数据恢复,这会比较快; 
4. 主键查询在InnoDB引擎下也会相当快,但是如果主键太长也会导致性能问题。

选择MyIASM引擎: 
1. 如果表的读操作远远多于写操作且不需要事务和外键支持;

这里写图片描述

参考:MySQL数据库引擎详解

原创粉丝点击