数据库引擎

Hello World, Hello DataBase

Posted by Resulte on April 12, 2020

数据库引擎

(1)InnoDB引擎

InnoDB使用B+树完成数据库索引的实现,但是在数据存储时数据结构中存储的是实际数据,被称为聚集索引的东东,不支持全文检索,启动也是比较慢的。 InnoDB引擎支持ACID事务的支持,提供了行级锁和外键约束,设计目标是处理大容量数据库系统,处理过程中会在内存中建立数据库缓冲区用于缓存数据和索引数据。但是如果进行select count(*) from 时,会进行全表扫描,不会缓存扫描结果;同时在高并发的情况下,由于InnoDB引擎支持的锁的粒度较细,不会在写操作时全表锁定,有利于高并发下性能的提升。

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存储引擎。