MySQL常见的几种存储引擎

平时经常用的MySQL数据库建表,也没关注过存储引擎的事情,天天就是CRUD,只要数据搞到就没问题了,最近学了一些MySQL存储引擎层的课程,才发现存储引擎层在平时看不到时候,后面还有很多操作,现在我说一下在MySQL存储引擎层常见的集中引擎。

查询数据库的表使用的sql语句:

      show  table  status  from  '数据库名';

MySQL常见的几种存储引擎

 

一般我们用MySQL 建表 默认使用的 是 InnoDB 存储引擎。

MySQL 常见的数据引擎: MyiSAM , InnoDB,Memory , CSV , Archive

 

MyISAM :(3个文件)

                MySQL自带的存储引擎,有 ISAM 升级来的。 应用范围较小,表级别锁定限制了 读/写 的性能,因此在 Web 和数据仓库配置中,它通常用于只读或以读为主的工作

特点:

1、支持表级别锁(插入和更新会锁表),不支持事务。

2、拥有较高的插入(insert)和查询(select)速度。

3、存储了表的行数。(count 速度更快)

(怎么快速的向数据库插入100万条数据 ? 我们有一种先用 MyISAM 插入数据,然后再修改表的存储引擎为 InnoDB 型存储引擎)

适合:只读之类的数据分析的项目。

 

InnoDB : (2个文件)

最初是第三方公司为 MySQL  开发的。

MySQL 5.7 版本中的默认存储引擎,InnoDB 是一个事务安全(与 ACID兼容 )的 MySQL 存储引擎,它具有提交,回滚,和崩溃恢复功能来保护数据的安全。 InnoDB 行级锁(不升级为更粗粒度的锁),和 Oracle 风格的一致,非锁读提高了多用户并发性能。 InnoDB 将用户数据存储在聚集索引中,以间少基于主键的常见的查询的 IO ,为了保证数据完整性,InnoDB 还支持外键引用完整性约束。

特点:

1、支持事务,支持外键,因此数据的完整性,一致性更高。

2、支持行级别的锁和表级别的锁。

3、支持并发读写,写不阻塞读(MVCC)。

4、特殊的索引存放方式,可以间少 IO ,提升查询效率。

适合:经常更新的表,存在并发读写或者有事务处理的业务系统。

 

Memory : (1个文件)

将所有的数据存储在 RAM 中,以便在需要快速查找非关键数据的环境中快速访问数据,这个引擎以前被称为兑引擎,现在使用案例正在间少。 InnoDB 及其缓冲池内存区域提供了一种通用、持久的方法来将大部分或所有保存的数据保存在内存中,而 ndbcluster 为大型分布式数据集提供了快速的键值查找。

特点:

1、把数据存放在内存中,读写的速度很快,但是数据库重新启动,或者崩溃,数据就会全部丢失。只适合做临时表。

2、将表中的数据存储在内存中。

3、默认使用哈希索引。

 

CSV : (3个文件)

它的表实际上是带有逗号分隔值的文本文件,csv 表允许以 csv 格式导入或者转储数据,以便与读写相同格式的脚本和应用程序交换数据。因此 csv 表没有索引,所以通常在正常操作期间将数据保存在 InnoDB 表中,并且只有在导入或者导出阶段使用 csv 表。

特点:

1、不允许空行,不支持索引。

2、格式通用,可以直接编辑。

适合:适合在不同数据库之间进行导入、导出。

 

Archive : (2个文件)

紧凑的未索引的表用于存储和检索大量很少引用的历史,存档或安全审计信息。

特点:

1、不支持索引,不支持 update , delete。

 

不同的存储引擎提供的特性都不一样,它们有不同的存储机制、索引方式、锁定水平等功能。

我们在不同的业务场景中对数据操作的要求不同,就可以选择不同的存储引擎来满足我们的需求,这也是 MySQL 支持众多存储引擎的原因,也是这些存储引擎叫做插入式引擎的原因。

 

如何选择存储引擎?

1、如果对数据一致性要求较高,需要支持事务,可以选择 InnoDB 。

2、如果数据查询多更新少,对查询性能要求比较高,可以选择 MyISAM 。 

3、如果需要一个用于查询的临时表,可以选择 Memory 。

4、如果所有已存在的存储引擎都不满足你需要的,可以当个狼人,按照规范,自己写一个。