MySQL存储引擎memory和merge介绍

栏目: 数据库 · 发布时间: 7年前

内容简介:一. memory存储引擎memoery存储引擎是在内存中来创建表,每个memory表只实际对应一个磁盘文件格式是.frm.  该引擎的表访问非常得快,因为数据是放在内存中,且默认是hash索引,但服务关闭,表中的数据就会丢失掉。-- 下面创建一个memory表,并从city表获得记录

一. memory存储引擎

memoery存储引擎是在内存中来创建表,每个memory表只实际对应一个磁盘文件格式是.frm.  该引擎的表访问非常得快,因为数据是放在内存中,且默认是hash索引,但服务关闭,表中的数据就会丢失掉。

-- 下面创建一个memory表,并从city表获得记录

CREATE TABLE tab_memory ENGINE=MEMORY

SELECT city_id,country_id FROM city GROUP BY city_id

MySQL存储引擎memory和merge介绍

-- 给momory 表创建索引时,可以指定是hash索引还是btree索引

CREATE INDEX mem_hash USING HASH ON tab_memory(city_id);

SHOW INDEX FROM tab_memory

MySQL存储引擎memory和merge介绍

DROP INDEX mem_hash ON tab_memory;

CREATE INDEX mem_hash USING BTREE ON tab_memory(city_id)

SHOW INDEX FROM tab_memory

MySQL存储引擎memory和merge介绍

总结:服务器需要足够的内存来维护所有在同一时间使用的memory表,当不再需要时,要释放,应执行 delete from 或 truncate table 或删除表drop table。

每个memory表放置的数据量大小,受到max_heap_table_size系统变量的约束,初始值是16MB. 通过max_rows 子句指定表的最大行数。

memory类型 一般应用于临时表,如统计操作的中间结果表。

二. merge 存储引擎

merge 引擎是一组MyISAM表的组合,这些MYISAM表必须结构完全相同,merge表本身并没有数据,对表的增删改查 实际是对内部的myisam表进行操作。

对于merge类型表的插入操作有三种类型:first是插入在第一个表,last是插入到最后一个表,不定义或为NO表示不能对merge表执行插入操作,对于merge表的drop操作,内部的表没有任何影响。merge 在磁盘上保留两个文件,一个是.frm文件存储表定义,另一个是.mrg文件包含组合表的信息。

-- 下面来测试下,创建三个结构相同的表 payment_2006,payment_2007,payment_all(merge类型)。

CREATE TABLE payment_2006(

country_id SMALLINT,

payment_date DATETIME,

amount DECIMAL(15,2),

KEY inx_fx_country_id (country_id)

)ENGINE =MYISAM

CREATE TABLE payment_2007(

country_id SMALLINT,

payment_date DATETIME,

amount DECIMAL(15,2),

KEY inx_fx_country_id (country_id)

)ENGINE =MYISAM

CREATE TABLE payment_all(

country_id SMALLINT,

payment_date DATETIME,

amount DECIMAL(15,2),

INDEX  (country_id)

)ENGINE =MERGE UNION=(payment_2006,payment_2007) INSERT_METHOD=LAST;

-- 分别向payment_2006和payment_2007表插入数据

INSERT INTO payment_2006 VALUES(1,'2006-05-01',100000),(2,'2006-08-01',150000);

INSERT INTO payment_2007 VALUES(1,'2007-05-01',200000),(2,'2007-08-01',350000);

-- 查询payment_all

SELECT * FROM payment_all;

下图发现该paymnet_all表合并了二表的结果集:

MySQL存储引擎memory和merge介绍

-- 下面向payment_all表插入数据 表定义是INSERT_METHOD=LAST;

INSERT INTO payment_all VALUES(3,'2006-05-01',112000);

-- 查询

SELECT * FROM payment_2007;

MySQL存储引擎memory和merge介绍

总结: MERGE表并不能智能地将记录写到对应的表中,而分区表是可以的,通常我们使用merge表来透明地对多个表进行查询和更新操作。

三..如何选择合适的存储引擎

myisam: 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性,并发性要求不是很高,例如数据仓储。

innodb: 用于事务处理应用程序,支持外键,对事务的完整性较高,并发条件下数据一致性,包括很多的更新和删除操作,它能避免删除和更新导致的锁定,还提供了提交和回滚,例如计算费用对数据准确性要求高的。

memory: 数据保存在ram(内存)中,访问速度快,但对表的大小有限制,要确保数据是可以恢复的,常用于更新不太频繁的小表,用以快速访问。

merge: 它是myisam表以逻辑方式组合的引擎,将myisam表分布在多个磁盘上,可以有效改善merge表的访问效率。例如数据仓储等。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-09/154349.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网络是怎样连接的

网络是怎样连接的

[日]户根勤 / 周自恒 / 人民邮电出版社 / 2017-1-1 / CNY 49.00

本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术。同时,专设了“网络术语其实很简单”专栏,以对话的形式介绍了一些网络术语的词源,颇为生动有趣。 本书图文并茂,通俗易懂,非常适合计算机、网络爱好者及相关从......一起来看看 《网络是怎样连接的》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具