概述
数据库存储引擎的作用:
在mysql中,数据是采用多种不同的技术存储在内存中的,而每一项技术都使用不同的存储机制、索引技巧、索引水平来提供不同的功能与能力。
存储引擎也可以说为是数据库中的表类型,设定了存储引擎的数据表在数据存储方面、更新以及查询都会有相应的效果。
存储引擎能够保护数据,控制访问权限和快速处理事务。
存储引擎能够提供日常管理支持以优化数据库的性能。
存储引擎主要有(9种):
MyIsam , InnoDB, Memory, Blackhole, CSV, Performance_Schema, Archive, Federated , Mrg_Myisam,本文不做全部介绍,有兴趣请自行研究。
MyIsam :
1.基于ISAM数据库引擎。
2.提供ISAM里所没有的索引和字段管理等大量功能。
3.使用一种表格锁定的机制来优化多个并发的读写操作,但是需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间,否则碎片也会随之增加,最终影响数据访问性能。
4.快速读取操作,主要用于高负载的select。
5.工具:修复数据库文件的MyISAMChk工具和用来恢复浪费空间的 MyISAMPack工具。
6.不能在表损坏后恢复数据。(是不能主动恢复)。
MyISAM类型的表支持三种不同的存储结构:静态型、动态型、压缩型。
适用场景:
一、不支持事务的设计,但是并不代表着有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制。
二、不支持外键的表设计。
三、查询速度很快,如果数据库insert和update的操作比较多的话比较适用。
四、整天 对表进行加锁的场景。
五、MyISAM极度强调快速读取操作。
六、MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。
InnoDB
1.提供了ACID事务支持、系统崩溃修复能力和多版本并发控制的行级锁。
2.支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空则自动从现有值开始增值,如果有但是比现在的还大,则直接保存这个值。
3.支持外键(foreign key) ,外键所在的表称为子表而所依赖的表称为父表。
4.该引擎在5.5后的MySQL数据库中为默认存储引擎。
适用场景:
一、经常更新的表,适合处理多重并发的更新请求。
二、支持事务。
三、可以从灾难中恢复(通过bin-log日志等)。
四、外键约束。只有他支持外键。
五、支持自动增加列属性auto_increment。
Memory/HEAP
1.使用存在内存中的内容来创建表。
2.每个MEMORY表只实际对应一个磁盘文件。
3.MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。 HEAP允许只驻留在内存里的临时表格,驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。
4.支持散列索引和B树索引,B树索引可以使用部分查询和通配查询,也可以使用<,>和>=等操作符方便数据挖掘,散列索引相等的比较快但是对于范围的比较慢很多。
5.要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的)。
6.要记住,在用完表格之后就删除表格。
适用场景:
一、那些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地堆中间结果进行分析并得到最终的统计结果。
二、目标数据比较小,而且非常频繁的进行访问,在内存中存放数据,如果太大的数据会造成内存溢出。可以通过参数max_heap_table_size控制Memory表的大小,限制Memory表的最大的大小。
三、数据是临时的,而且必须立即可用得到,那么就可以放在内存中。
四、存储在Memory表中的数据如果突然间丢失的话也没有太大的关系。
Mrg_Myisam:(分表的一种方式–水平分表)
1.将MyIsam引擎的多个表聚合起来,但是他的内部没有数据,真正的数据依然是MyIsam引擎的表中,但是可以直接进行查询、删除更新等操作。
2.同一种类的数据会根据数据的时间分为多个表,如果这时候进行查询的话,就会比较麻烦,Merge可以直接将多个表聚合成一个表统一查询,然后再删除Merge表(删除的是定义),原来的数据不会影响。
Blackhole(黑洞引擎)
1.任何写入到此引擎的数据均会被丢弃掉, 不做实际存储。
2.Select语句的内容永远是空。
下面对InnoDB和MyIsam进行比较:
对比插入效率(百万级插入):(虽然速度上MyISAM快,但是增删改是涉及事务安全的,所以用InnoDB相对好很多)
对比更新:(虽然速度上MyISAM快,但是增删改是涉及事务安全的,所以InnoDB相对好很多)
参考链接:https://www.cnblogs.com/sunsky303/p/8274586.html
最后
以上就是懵懂大神为你收集整理的mysql的几种存储引擎的全部内容,希望文章能够帮你解决mysql的几种存储引擎所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复