InnoDB存储引擎
- 大于等于5.5之后,默认采用InnoDB引擎;
- InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(commit)和回滚(rollback);
- 除了增加和查询之外,还需要更新,删除操作,那么应优先选择InnoDB存储引擎;
- 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
MyISAM存储引擎
- MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但是MyISAM不支持事务和行级锁,有一个毫无疑问的缺陷就是崩溃后无法安全恢复;
- 5.5之前默认的存储引擎;
- 数据文件结构:
- .frm存储定义表
- .myd存储数据
- .myi存储索引
- 特别注意:
- 静态表字段都是非变长字段,存储占用空间比动态表多。存储数据时会按照列宽补足空格,但在访问时候并不会得到这些空格;
- 如果存储数据本身后面有空格,那么查询时也会被去掉;
- 如果存储数据本身前面有空格,则查询时不会被去掉;
- 在没有where条件情况下统计表count(*)数量,不需要全表扫描,而是直接获取保存好的值。
- 静态表字段都是非变长字段,存储占用空间比动态表多。存储数据时会按照列宽补足空格,但在访问时候并不会得到这些空格;
InnoDB引擎和MyISAM引擎的区别
对比项 | MyISAM | InnoDB |
---|---|---|
外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 | 行锁,操作时只锁某一行,不对其他行有影响,适合高并发的操作 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
自带系统表使用 | Y | N |
关注点 | 性能:节省资源、消耗少、简单业务 | 事务:并发写、事务、更大资源 |
默认安装 | Y | Y |
默认使用 | N | Y |