MySQL数据库优化三、MySQL体系结构与存储引擎(下)

MySQL常用存储引擎

CSV存储引擎

文件系统存储特点

CSV存储引擎可以将CSV文件作为MySQL的表来处理,这种存储引擎的存储格式就是普通的CSV文件。
CSV存储引擎存储数据的方式非常有特点,如果我们把数据存入到MyISAM或者Innodb存储引擎中去的话,数据文件我们是不能直接查看的,因为这两种存储引擎都是以二进制文件来进行存储的。而CSV存储引擎则不同,CSV是通过文件的形式来存储的,数据以文本的方式存储在文件中,我们可以直接查看文件中的数据。
CSV存储引擎建立表之后,会产生三个文件,分别是 以 .CSV、.CSM、.frm后缀结尾的文件。.CSV文件存储表的内容,.CSM文件存储表的元数据如表状态和数据量,.frm文件存储表的结构信息。
在这里插入图片描述

功能特点

以CSV格式进行数据存储

前面说了,CSV存储引擎最大的特点就是以CSV文件格式进行存储,存储内容特点是数据以英文逗号隔开,文本用双引号引起来。下图就是CSV文件存储的内容。
在这里插入图片描述

所有列必须都是不能为NULL的

CSV存储引擎存储的数据是不能为NULL的
在这里插入图片描述在这里插入图片描述

不支持索引

CSV不支持索引,索引的主要作用就是为了优化查询效率。如果一个表不支持索引,那么每次查询都会进行全表扫描。对于一个大表来说,查询效率会非常低。所以从这点来讲,CSV存储引擎不适合大表存储,以及实时性高,查询效率要求高的业务查询。

可以对数据文件直接编辑

因为存储的是CSV文件,我们可以直接对文件进行编辑。这一点也是与其他以二进制进行存储的存储引擎所不同的。

适用场景

适合作为数据交换的中间表

我们可以把excel的数据存储为CSV格式,然后复制到MySQL目录下,就可以在MySQL中进行使用了。
同样的,我们使用CSV存储引擎,在数据库中写入数据后,其他程序也能立刻读取到写入的文件内容。

所以说CSV非常适合作为数据交换的中间表来进行使用。

Archive存储引擎

文件系统存储特点

  • 以zlib对表数据进行压缩,磁盘I/O更少
    archive存储引擎会缓存所有的写,并且会以zlib对插入的行进行压缩。所以archive存储引擎会比MyISAM存储引擎的表更加节约磁盘IO。对于相同数量的数据,archive比MyISAM和Innodb更加节约空间。

  • 数据存储在ARZ后缀的文件中
    archive存储引擎存储的数据文件是以ARZ为后缀的文件中,同时也与其他存储引擎一样也有一个frm的文件,用以存储表的结构信息。
    在这里插入图片描述

功能特点

只支持insert和select操作

相对于其他存储引擎,最大的不同点就是archive存储引擎只支持insert和select操作。archive存储引擎支持行级锁和专用缓冲区,可以实现高并发的插入。这个存储引擎在某些方面模仿了事务型存储引擎的特点,但archive本身并不是事务存储引擎
在这里插入图片描述在这里插入图片描述

只允许在自增ID列添加索引

第二个特点就是只能在自增id列添加索引,不能在其他列添加索引
在这里插入图片描述

适用场景

日志和数据采集类的应用

由于这种存储引擎的特性决定了,不能支持删除和修改操作,支持插入和查询操作。同时能对数据进行压缩。这种特性就比较适合记录日志之类的操作。

Memory存储引擎

文件系统存储特点

memory 存储引擎也称为HEAP存储引擎。这个存储引擎的所有数据是存储在内存当中,这也意味着这种存储引擎表的数据是容易丢失的,一旦MySQL服务器重启或者由于其他原因导致的服务器关闭,都会导致Memory存储引擎表中的数据丢失。
表中的数据是存储在内存当中,但是表结构是独立的。表结构不会因为MySQL重启而丢失。memory存储引擎的表,只有一个.frm文件,用以存储表的结构信息。
由于数据是存储在内存当中,所以memory存储引擎的表的IO效率要比其他存储引擎高很多。

功能特点

支持HASH索引和 B-树索引

在建立索引时,如果没有指定索引类型,默认会创建HASH索引。由于HASH索引的特点,如果是做等值查询的话,会非常的快。但是要做范围查询的时候,就无法使用HASH索引了。所以当我们建立索引的时候呢,一定要清楚业务如何使用表的,等值查询场景较多则使用HASH索引,范围查询比较多的话使用B-树索引。

所有字段都为固定长度

memory表使用固定长度的行存储格式,可变长度类型如Varchar使用固定长度。比如我们定义时定义了varchar(5)这样的数据类型,在存储时都会转成char(5)。

我们使用varchar可以定义的时候给的长度大一些,因为这是可变长度,最终占用的长度根据实际使用的长度决定。比如varchar(5),存储字符串“abc”,则实际长度为3。而如果使用char(5),存储字符串“abc”,实际占用的长度就是5。

memory存储引擎的表不能使用可变长度类型,只能使用固定长度类型,这就要求我们定义的时候要注意存储内容的大小,避免使用固定长度造成存储空间的浪费或不足。

Memory表不能包含BLOB 或 TEXT列

对于大文本的存储,memory是不能支持blob或text类型的数据。

Memory存储引擎使用表级锁

memory使用的是表级锁,我们把memory与Innodb做一下比较,memory存储效率未必就比Innodb高,因为Innodb也会把热数据缓存到内存中,而且Innodb是行级锁,粒度更小一些。

Memory表大小由max_heap_table_size控制

Memory表大小由max_heap_table_size控制,该值默认为16MB。max_heap_table_size 用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。
我们可以用下面的语法进行修改,但是注意修改对已经存在的memory表是无效的。

SET GLOBAL max_heap_table_size=2147483648

或者在配置文件中修改

vi /etc/my.cnf 
[mysqld] 
max_heap_table_size = 2048M 
tmp_table_size = 2048M

MEMORY表支持AUTO_INCREMENT列

memory存储引擎可以使用自增列

像其他非临时表一样,非临时内存表也可多Session共享

memory存储引擎的表是可以多session之间进行访问

Memory表与 TEMPORARY(临时)表

两者均可将数据放入内存,当临时表数据超过tmp_table_size时,自动转化为磁盘表,性能急剧下降
MEMORY表数据满之后,会提示错误,不会进行转化。
memory存储引擎的表是非临时表,多session是共享可见的。而临时表则只能当前session可见。

适用场景

用于查找或者是映射表,列如地区对应表

用于保存计算或分析产生的临时数据

缓存周期性聚合数据的结果表

memory存储引擎数据是易丢失的,临时的。我们要注意数据应该是可以重新生成的数据,而不能作为一种长久存储的数据进行使用。就类似于我们的缓存操作以一样。

Federated存储引擎

FEDERATED存储引擎能让你访问远程的MySQL数据库而不使用replication或cluster技术(类似于Oracle的dblink),使用FEDERATED存储引擎的表,本地只存储表的结构信息,数据都存放在远程数据库上,查询时通过建表时指定的连接符去获取远程库的数据返回到本地。

存储特点

1 本地服务器 FEDERATED 存储引擎的表只存放表的.frm结构文件
2 远程服务器 存放了.frm和数据文件
3 增删改查操作都是通过建立的连接来访问远程数据库进行操作,把结果返回给本地。
4 远程数据表的存储引擎为MySQL支持的存储引擎,如MyISAM,InnoDB等

使用场景

我觉的这个存储引擎没啥用,对于这个存储引擎我也不去深究了。默认MySQL这个存储引擎是不可用的,想要使用还得再MySQL中开启。更多的可以参考《 FEDERATED 存储引擎描述》 这篇文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值