MySQL中存在两种引擎:MyISAM和Innodb。
其中MyISAM是MySQL默认的引擎,它不支持事物操作,而且也不支持行级锁及外键。因此,当写操作较多时(如insert或者update),由于锁定了整个表,所以效率会低一些。MyISAM中存储了表的行数,当进行SELECT COUNT(*) FROM TABLE时不需要全表扫描,只需要直接读取即可。
和MyISAM不同的是,Innodb提供了数据库事物的支持,并且提供了行级锁和外键约束。MySQL运行时Innodb会在内存中建立索引池,用于缓冲数据和索引。不过Innodb不支持全文索引,启动速度较慢,并且不保存表的行数。Innodb在并发下效率较高。
以下是关于二者的比较
对比项 | MyISAM | Innodb |
---|---|---|
事物 | 不支持 | 支持 |
主外键 | 不支持 | 支持 |
行表锁 | 表锁 | 行锁 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引,还缓存真实数据 |
表空间 | 小 | 大 |
全文索引 | 支持 | 不支持 |
关注点 | 性能 | 事物 |
应用场景 | 管理非事物表,提供高速存储和检索以及全文搜索的能力,有大量的select操作 | 事物处理,有大量的insert和update操作,并发下 |