数据库引擎
(1)InnoDB引擎
InnoDB使用B+树完成数据库索引的实现,但是在数据存储时数据结构中存储的是实际数据,被称为聚集索引的东东,不支持全文检索,启动也是比较慢的。
InnoDB引擎支持ACID事务的支持,提供了行级锁和外键约束,设计目标是处理大容量数据库系统,处理过程中会在内存中建立数据库缓冲区用于缓存数据和索引数据。但是如果进行select count(*) from
InnoDB是事务型存储引擎,适合对事务要求较高的场景中;但较适用于处理大量短期事务; 基于MVCC(Mutli Version Concurrency Control)支持高并发;支持四个隔离级别,默认级别为REPEATABLE-READ;间隙锁以防止幻读; 使用聚集索引(主键索引);索引和数据在一起,一个索引对应一个数据。 支持”自适应Hash索引“; 锁粒度:行级锁;间隙锁; InnoDB改表改一行锁一行,MyISAM改一行也要锁定整个表
(2)MyISAM引擎
MyIASM使用B+树完成数据库索引的实现,但是在数据存储时数据结构中存储的是实际数据的地址,被称为非聚集索引,支持全文检索 MyIASM不支持事务操作,不支持行级锁和外键的约束;在进行select count(*) from <table>操作时会缓存数据,不会进行全表扫描。
MyISAM: 支持全文索引(FULLTEXT index)、压缩、空间函数(GIS); 不支持事务 锁粒度:表级锁 崩溃无法保证表安全恢复 特性: 加锁和并发:表级锁; 修复:手动或自动修复、但可能会丢失数据; 索引:非聚集索引; 延迟索引更新; 表压缩; 适用场景:只读或读多写少的场景、较小的表(以保证崩溃后恢复的时间较短);
(3)Memory/Heap
MEMORY:内存存储引擎,支持hash索引,表级锁,常用于临时表;
所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。
(4)如何选择
如果我们的数据库存储大量数据,需要支持事务操作和外键约束,同时在出现故障需要快速恢复时,使用InnoDB引擎;
如果我们的数据库中需要大量而频繁的的insert语句操作时,可以选择MyIASM数据库引擎。
如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。