这记忆
存储引擎(以前称为堆
)使用存储在内存中的内容创建专用表。由于数据很容易受到崩溃,硬件问题或停电,因此只使用这些表作为临时工作区域或从其他表中拉动的数据的只读缓存。
表16.4内存存储引擎功能
特征 | 支持 |
---|---|
B树索引 | 是的 |
备份/时间点恢复(在服务器中实现,而不是在存储引擎中。) | 是的 |
群集数据库支持 | 不 |
聚集索引 | 不 |
压缩数据 | 不 |
数据库库 | N / A. |
加密数据 | 是(通过加密函数在服务器中实现。) |
外国钥匙支持 | 不 |
全文搜索索引 | 不 |
地理空间数据类型支持 | 不 |
地理空间索引支持 | 不 |
哈希索引 | 是的 |
索引缓存 | N / A. |
锁定粒度 | 桌子 |
MVCC. | 不 |
复制支持(在服务器中实现,而不是在存储引擎中。) | 有限(见本节后面的讨论。) |
存储限制 | 内存 |
T树索引 | 不 |
交易 | 不 |
更新数据字典的统计信息 | 是的 |
寻找部署使用的应用程序的开发人员记忆
用于重要的,高可用性或经常更新的数据的存储引擎应考虑NDB群集是否是更好的选择。典型的用例记忆
发动机涉及这些特征:
涉及暂行,非关键数据(如会话管理或缓存)的操作。当MySQL Server停止或重新启动时,数据
记忆
表丢失了。内存存储以快速访问和低延迟。数据量可以完全适合内存而不会导致操作系统交换虚拟内存页面。
只读或读取大多数数据访问模式(有限的更新)。
NDB群集提供与此相同的功能记忆
具有更高性能水平的发动机,提供了不可用的其他功能记忆
:
记忆
性能受到单线程执行而导致的争用和处理更新时的开销产生的争用。这限制了加载增加时的可扩展性,特别是对于包括写入的语句混合。
尽管内存处理了记忆
表格,它们不一定比Innodb.
繁忙服务器上的表,用于通用查询,或在读/写工作量下。特别是,涉及执行更新的表锁定可以减慢并发使用记忆
来自多个会话的表格。
取决于对A执行的查询种类记忆
表,您可能会创建索引作为默认哈希数据结构(用于根据唯一键查找单个值),或者是通用B树数据结构(用于涉及平等,不等式或范围运算符的所有类型查询如小于或大于)。以下部分说明了用于创建两种索引的语法。常见的性能问题使用Workloads中的默认哈希索引,其中B树索引更有效。
这记忆
存储引擎不会在磁盘上创建任何文件。表定义存储在MySQL数据字典中。
记忆
表具有以下特征:
创建一个记忆
表格,指定条款引擎=内存
在这一点创建表
陈述。
创建表T(i int)引擎=内存;
如引擎名称所示,记忆
表存储在内存中。默认情况下,它们使用哈希索引,这使得它们非常快速地用于单值查找,并且非常有用地创建临时表。但是,当服务器关闭时,存储的所有行记忆
表丢失了。表本身继续存在,因为它们的定义存储在MySQL数据字典中,但在服务器重新启动时它们是空的。
此示例显示如何创建,使用和删除a记忆
桌子:
MySQL> Create Table Test Engine = Memory选择IP,Sum(下载)从10bet手机中文版log_table组按IP;MySQL>从测试中选择Count(IP),AVG(DOWN);mysql>删除表测试;
最大尺寸记忆
桌子受到限制max_heap_table_size.
系统变量,默认值为16MB。强制执行不同的大小限制记忆
表,更改此变量的值。有效的价值创建表
,或随后的改变表
或者截断表
,是桌子寿命的价值。服务器重新启动还设置现有的最大大小记忆
全球的表格max_heap_table_size.
价值。您可以设置本节后面描述的各个表的大小。
这记忆
存储引擎支持哈希
和Btree.
索引。您可以通过添加一个给定索引指定一个或另一个使用
条款如下所示:
创建表查找(ID int,索引使用哈希(ID))引擎=内存;创建表查找(使用Btree(ID))引擎=内存的表查找(ID intex;
对于B树和哈希索引的一般特征,见第8.3.1节“MySQL如何使用索引”。
记忆
表每表最多可包含64个索引,每索引16列,最大键长度为3072字节。
如果一个记忆
表哈希索引具有高度的密钥复制(许多包含相同值的索引条目),对影响密钥值的表格更新,并且所有删除都显着较慢。这种放缓的程度与复制程度(或与索引基数成反比)成比例。你可以使用一个Btree.
索引避免这个问题。
记忆
表格可以具有非纯键。(这是哈希索引实现的一个罕见的特征。)
索引的列可以包含空值
价值观。
记忆
表内容存储在内存中,这是一个属性记忆
表与内部临时表共享,即处理查询时服务器在飞行中创建。但是,这两种类型的表格不同记忆
表不受存储转换的影响,而内部临时表是:
如果内部临时表变得太大,则服务器会自动将其转换为磁盘存储,如下所述第8.4.4节“MySQL内部临时表”。
用户创建的
记忆
表永远不会转换为磁盘表。
填充A.记忆
表当MySQL Server启动时,可以使用init_file.
系统变量。例如,您可以放置诸如此类的陈述插入...选择
或者加载数据
进入文件以从持久性数据源加载表,并使用init_file.
命名文件。看第5.1.8节“服务器系统变量”。, 和第13.2.7节“加载数据声明”。
当复制源服务器关闭并重新启动时,其记忆
表变空。要将这种效果复制到副本,第一次使用给定的源记忆
Startup后表,它会记录一个通知副本的事件,即必须通过写作一个表来清空表删除
或(来自MySQL 8.0.22)截断表
该表到二进制日志的陈述。当副本服务器关闭并重新启动时,其记忆
表也变为空,它写了一个删除
或(来自MySQL 8.0.22)截断表
对其自己的二进制日志的语句,它将传递给任何下游副本。
当你使用时记忆
复制拓扑中的表,在某些情况下,源上的表和副本上的表格可以不同。有关处理每种情况的信息以防止陈旧读取或错误,请参阅第17.5.1.21节“复制和记忆表”。。
服务器需要足够的内存来维护所有内存记忆
同时使用的表。
如果您从a中删除单个行,则不会回收内存记忆
桌子。仅在删除整个表时才会回收内存。以前用于删除行的内存重新用于同一表中的新行。释放a使用的所有内存记忆
表当您不再需要其内容时,执行删除
或者截断表
要删除所有行,或者删除表格使用下拉表
。释放已删除的行使用的内存,使用更改表引擎=内存
强制桌面重建。
一行中需要的内存记忆
表是使用以下表达式计算的:
sum_over_all_btree_keys(max_length_of_key.+ sizeof(char *)* 4)+ sum_over_all_hash_keys(sizeof(char *)* 2)+对齐(length_of_row.+1,sizeof(char *))
对齐()
表示圆形因素,使行长度是精确的倍数char
指针大小。sizeof(char *)
在32位机器上是4个,64位机器上的8台。
如前所述,max_heap_table_size.
系统变量设置最大大小的限制记忆
表。要控制各个表的最大大小,请在创建每个表之前设置此变量的会话值。(不要改变全球max_heap_table_size.
除非您打算用于要使用的值记忆
所有客户端创建的表。)以下示例创建两个记忆
桌子,最大尺寸为1MB和2MB:
mysql> set max_heap_table_size = 1024 * 1024;查询确定,0行受影响(0.00秒)MySQL> Create Table T1(ID Int,唯一(ID))引擎=内存;查询OK,0行受影响(0.01秒)MySQL> Set Max_heap_table_size = 1024 * 1024 * 2;查询确定,0行受影响(0.00秒)MySQL> Create Table T2(ID,唯一(ID))引擎=内存;查询OK,影响0行(0.00秒)
两个表都恢复到服务器的全局max_heap_table_size.
如果服务器重新启动值。
您还可以指定一个max_rows.
表选项创建表
陈述记忆
表可以提供关于您计划存放在其中的行数的提示。这并不能使表格扩大max_heap_table_size.
值,它仍然是最大表大小的约束。为了能够使用的最大灵活性max_rows.
, 放max_heap_table_size.
至少与您想要的值一样高记忆
表可以增长。
一个致力于的论坛记忆
存储引擎可用https://forums.10bet靠谱mysql.com/list.php?92。