MySQL存储引擎之Memory 您所在的位置:网站首页 mysql存储引擎memory MySQL存储引擎之Memory

MySQL存储引擎之Memory

2024-07-09 23:12| 来源: 网络整理| 查看: 265

文件系统存储特点 称HEAP存储引擎,所以数据保存在内存中(服务器重启则表的数据丢失,但是表结构是保留的,表结构保存在磁盘文件中,而表的内容是存储在内存中) 功能特点 支持HASH索引(等值查询)和BTree索引(范围查找)(默认HASH) 所有字段都为固定长度varchar(10) = char(10) 不支持BLOG和TEXT等大字段 Memory存储引擎使用表级锁 表的最大大小由max_heap_table_size参数决定(默认16M,对存在的表修改是无效的) 实例

首先创建表

MySQL [test]> create table mymemory (id int,c1 varchar(10),c2 char(10),c3 text ) engine = memory; ERROR 1163 (42000): The used table type doesn't support BLOB/TEXT columns MySQL [test]> create table mymemory (id int,c1 varchar(10),c2 char(10) ) engine = memory; Query OK, 0 rows affected (0.02 sec)

我们能够看到,表是不支持TEXT字段的

我们再看下文件系统

[root@wangerxiao test]# ls -lh mymemo* -rw-r----- 1 mysql mysql 8.5K Mar 17 15:25 mymemory.frm

只有一个保存表结构的文件

下面我们再看下表的索引 首先,新建两个索引

MySQL [test]> create index idx_c1 on mymemory(c1); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 MySQL [test]> create index idx_c2 using btree on mymemory(c2); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0

我们查看当前索引类型

MySQL [test]> show index from mymemory \G *************************** 1. row *************************** Table: mymemory Non_unique: 1 Key_name: idx_c1 Seq_in_index: 1 Column_name: c1 Collation: NULL Cardinality: 0 Sub_part: NULL Packed: NULL Null: YES Index_type: HASH Comment: Index_comment: *************************** 2. row *************************** Table: mymemory Non_unique: 1 Key_name: idx_c2 Seq_in_index: 1 Column_name: c2 Collation: A Cardinality: NULL Sub_part: NULL Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment: 2 rows in set (0.00 sec)

存在两个索引,一个为默认的,一个是指定的BTree。

接下来我们查看表的状态

MySQL [test]> show table status like 'mymemory'\G *************************** 1. row *************************** Name: mymemory Engine: MEMORY Version: 10 Row_format: Fixed Rows: 0 Avg_row_length: 86 Data_length: 0 Max_data_length: 7799082 Index_length: 0 Data_free: 0 Auto_increment: NULL Create_time: 2017-03-17 15:30:16 Update_time: NULL Check_time: NULL Collation: utf8mb4_general_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec)

Memory存储引擎表和临时表的区别

临时表分两类:系统使用临时表,create temporary table 建立的临时表。无论哪种表,只有当前session是可见的。而Memory表是所有线程都可以使用的。 系统使用临时表又分为两类:查过限制使用Myisam临时表,未超过限制使用Memory表。

使用场景

用于查找或者是映射表,例如邮编和地区的对应表 用于保存数据分析中产生的中间表 用于缓存周期性聚合数据的结果表

注意一点是:Memory数据易丢失,所以要求数据可再生

memory存储引擎是MySQL中的一类特殊的存储引擎。其使用存储在内存中的内容来创建表,而且所有数据也放在内存中。这些特性都与InnoDB,MyISAM存储引擎不同。 OK,这里我们讲解一些memory存储引擎的文件存储形式,索引类型,存储周期和优缺点。

每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名与表名相同,类型为frm类型。该文件只存储表的结构,而其数据文件,都是存储在内存中的,这样有利于对数据的快速的处理,提高整个表的处理效率。

值得注意的是:服务器需要有足够的内存来维持memory存储引擎的表的使用。如果不需要了,可以释放这些内存,甚至可以删除不需要的表。

Memory存储引擎默认使用哈希(HASH)索引,其速度比使用B型树(BTREE)索引快。如果我们需要使用B型树索引,可以在创建索引时选择使用。

这里来整理一个小的技巧:

Memory存储引擎通常很少用到,至少我是没有用到过。因为Memory表的所有数据都是存储在内存上的,如果内存出现异常会影响到数据的完整性。

如果重启机器或者关机,表中的所有数据都将消失,因此,基于Memory存储引擎的表的生命周期都比较短,一般都是一次性的。

Memory表的大小是受到限制的,表的大小主要取决于2个参数,分别是max_rows和max_heap_table_size。其中,max_rows可以在创建表时指定,max_heap_table_size的大小默认为16MB,可以按需要进行扩大。

因此,其基于内存中的特性,这类表的处理速度会非常快,但是,其数据易丢失,生命周期短。基于其这个缺陷,选择Memory存储引擎时需要特别小心。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有