MySQL存储引擎介绍之Memory

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
Memory存储引擎使用存在内存中的内容来创建表,每个Memory表只实际对应一个磁盘文件,在磁盘中表现为.frm文件。Memory类型的表访问速度非常快,因为它的数据是放在内存中的,并且默认使用hash索引,但是一旦服务关闭,表中的数据就会丢失。
   示例:create table memory_tab(id int)engine=memory;
因为memory在mysqld重启后数据就会丢失,为了获得稳定的数据源,可以在启动mysqld时加上—init-file选项,把insert into memory_tab select 或load data infile类似的语句放进去即可。
   另外因为memory表是把数据放到内存中的,所以服务器需要有足够的内存来维持所有在同一时间使用的memory表,注意对连接mysqld的所有用户连接  共享 内存表中的数据,根据应用如果不是在所有连接间共享数据,最好在内存表中加入标志各个连接的ID。当不再需要memory数据时,要记得去删除自己连接的数据。
对于内存表的官方说明:
The MEMORY storage engine creates tables with contents that are stored in memory. Formerly, these were known as HEAP tables. MEMORY is the preferred term, although HEAP remains supported for backward compatibility. 
Each MEMORY table is associated with one disk file. The filename begins with the table name and has an extension of .frm to indicate that it stores the table definition.
概括将就是: 内存表把表结构存放到磁盘上 ,而把数据放在内存中
As indicated by the name, MEMORY tables are stored in memory. They use hash indexes by default, which makes them very fast, and very useful for creating temporary tables. However, when the server shuts down, all rows stored in MEMORY tables are lost. The tables themselves continue to exist because their definitions are stored in .frm files on disk, but they are empty when the server restarts.
内存表的存储引擎默认使用的是hash index,速度要比使用B型树索引的MyISAM引擎快。
其它特性:
   内存表是有大小限制的,这主要取决于两个参数,一个是max_rows,另一个是max_heap_table_size.max_rows在创建表时可以指定(也可以 ALTER TABLE tbl_name MAX_ROWS= MAX_ROWS),这样在往表中写数据时,如果写入的数据超过了规定的数目,就会报The table is full的提示,这里需要注意的是,我测试发现如果用insert into table values(xx),(yy)..这种一次带多个插入值的形式,可以插入超过max_rows数量的记录。
其它特性:
1、heap对所有用户的连接是可见的,这使得它非常适合做缓存。
2、仅适合使用的场合。heap不允许使用xxxTEXT和xxxBLOB数据类型;只允许使用=和<=>操作符来搜索记录(不允许<、>、<=或>=);不支持auto_increment;只允许对非空数据列进行索引(not null)。
注:操作符 “<=>” 说明:NULL-safe equal.这个操作符和“=”操作符执行相同的比较操作,不过在两个操作码均为NULL时,其所得值为1而不为NULL,而当一个操作码为NULL时,其所得值为0而不为NULL。
3. HEAP表使用一个固定的记录长度格式。默认情况下max_rows依赖于max_heap_table_size.
4. HEAP不支持 BLOB/ TEXT列。

 
如果用过oracle的,一般类似的应用我们是用临时表来实现的,但是mysql的临时表与oracle比有一定的不同。
首先mysql创建临时表:create temporary table temp_tab(id int);
这里临时表默认使用的存储引擎是服务器指定的存储引擎(默认是myisam)。mysql临时表的定义和数据都是放在内存中,而未放到磁盘中,用show tables是找不到临时表的。
 
另外,因为memory的存取速度优于myisam,在用临时表做中间表的应用时,可以将其改为使用memory引擎的临时表。




本文转自 yubowei 51CTO博客,原文链接:http://blog.51cto.com/samyubw/223769

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 缓存 关系型数据库
Mysql的两种存储引擎以及区别
Mysql的两种存储引擎以及区别
15 1
|
1月前
|
存储 关系型数据库 MySQL
Mysql第七天,存储引擎
Mysql第七天,存储引擎
61 0
Mysql第七天,存储引擎
|
1月前
|
存储 关系型数据库 MySQL
【MySQL 数据库】5、存储引擎
【MySQL 数据库】5、存储引擎
112 0
|
1月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
178 0
|
2月前
|
存储 缓存 关系型数据库
MySQL - 存储引擎MyISAM和Innodb
MySQL - 存储引擎MyISAM和Innodb
|
1月前
|
存储 缓存 关系型数据库
MySQL两种存储引擎及区别
MySQL两种存储引擎及区别
24 4
MySQL两种存储引擎及区别
|
2天前
|
存储 缓存 关系型数据库
MySQL 存储引擎
MySQL 存储引擎
17 6
|
18天前
|
存储 缓存 关系型数据库
mysql存储引擎
mysql存储引擎
|
1月前
|
存储 关系型数据库 MySQL
MySQL中常见的存储引擎类型
【2月更文挑战第18天】
49 7
|
2月前
|
存储 关系型数据库 MySQL
MySQL 数据库系列(五)-----索引、事务与存储引擎(Linux版)
MySQL 数据库系列(五)-----索引、事务与存储引擎(Linux版)
28 0