1. 数据库存储引擎概念:
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。
不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能,现有的数据库管理系统(DBMS)都支持多种不同的数据引擎。
2. InnoDB(B+树)
InnoDB 底层存储结构为B+树(如下图所示), B树的每个节点对应innodb的一个page,page大小是固定的,一般设为16k。其中非叶子节点只有键值,叶子节点包含完成数据。
特点:
InnoDB为MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在 SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合。
InnoDB表的自动增长列可以手工插入,但是插入的如果是空或0,则实际插入到则是自动增长后到值。可以通过"ALTER TABLE…AUTO_INCREMENT=n;"语句强制设置自动增长值的起始值,默认为1,但是该强制到默认值是保存在内存中,数据库重启后该值将会丢失。可以使用LAST_INSERT_ID()查询当前线程最后插入记录使用的值。如果一次插入多条记录,那么返回的是第一条记录使用的自动增长值。
对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引到前面几列排序后递增的。
MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括restrict、cascade、set null和no action。其中restrict和no action相同,是指限制在子表有关联的情况下,父表不能更新;casecade表示父表在更新或删除时,更新或者删除子表对应的记录;set null 则表示父表在更新或者删除的时候,子表对应的字段被set null。
适用场景:
经常更新的表,适合处理多重并发的更新请求。
InnoDB支持事务。
可以从灾难中恢复(通过bin-log 日志等)。
外键约束,只有InnoDB支持外键。
支持自动增加列属性auto_increment。
3. MyIASM
特点:
MyIASM是MySQL 默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。
ISAM 执行读取操作的速度很快,而且不占用大量的内存和存储资源。在设计之初就预想数据组织成有固定长度的记录,按顺序存储的。
ISAM 是一种静态索引结构,不支持事务处理。
MyISAM的表支持3种不同的存储格式:
静态(固定长度)表。
动态表。
压缩表。
适用场景:
MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,同时插入操作比较少,那么MyISAM是更好的选择。
进行频繁的count操作。
没有事务的操作。
4. Memory
特点:
Memory(也叫HEAP)堆内存:使用存在内存中的内容来创建表。
每个MEMORY 表只实际对应一个磁盘文件。
MEMORY 类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH 索引。但是一旦服务关闭,表中的数据就会丢失掉。
Memory 同时支持散列索引和B 树索引,B树索引可以使用部分查询和通配查询,也可以使用<,>和>=等操作符方便数据挖掘,散列索引相等的比较快但是对于范围的比较慢很多。
适用场景:
memeory存储引擎使用hash索引对于等值查找非常高效,常用于查找邮编和地区对应的关系表。
由于memeory的易失性,可以用于存储在分析中产生的中间表。
使用memroy存储引擎的表一定要是可以再生的或者是不需要的。
5. InnoDB、MyIASM和Memory性能对比
6. Archive
特点:
会缓存所有的写,并用zlib对表的数据进行压缩。
相比MyISAM会更加节约磁盘io,比myisam和innodb更见节约磁盘空间,一个几T的表可能只要几百M的存储空间。
创建表的时候会产生两个文件:一个是数据文件是以ARZ为后缀的文件,一个是frm后缀存储表结构信息。
只支持insert 和select操作,可以实现高并发的插入,支持在自增id上建立索引。
适用场景:
归档数据、日志信息(系统功能模块访问日志)。
参考博客:https://blog.csdn.net/qq_29168493/article/details/79066399
————————————————
版权声明:本文为CSDN博主「爱养鸡的程序员小明」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shaomingmin/article/details/106242114