若可以使用表分区,应首选表分区而不是使用merge来分表。
1.也叫
MRG_MyISAM,
merge引擎使用示例:2.目前(2015-11-05)merge引擎所关联的表只能是MyISAM引擎,不能是Innodb引擎
3.在merge table上是用drop table时只是影响的merge table并不影响被关联表如(t1,t2)
4.创建merge表必须要有
UNION=(list-of-tables
)语句
insert_method为可选参数,取值为last,first,no 其中last为插入到union中的最后一张表,first为插入到第一张表,no表示merge表不可插入若强行执行插入会报错
5.merge表所依赖的各个表的主键在merge表中会被索引但不是主键索引(唯一索引同理)
6.修改merge表所依赖的表有两种方式:
a.删除merge表并重新创建
b.alter table merge_table union=(t1,t2,...);
7.union中所有表的结构和索引必须严格一致,但这个一致性检查是在打开merge表的时候进行检查,而不是在创建的时候检查;
其中列的一致性要求如下:
a.union中的表和merge表必须column名称、个数一致
b.对应列类型必须完全相同
c.对应列长度定义必须完全相同
d.union中表的列可以为null
索引一致性要求如下:
a.union中表的索引可以大于等于merge表的索引,但不能少于merge表的索引
b.union中表的索引类型必须和merge表中的索引类型一致
c.对于复合索引,union中各个表索引中的列必须和merge表中索引列完全相同
d.各个部分索引中的索引长度、语言必须完全一致;是否为空也必须一致
8.merge表使用有问题,使用 check table语句可以找到问题。
使用场景及优缺点
优点:
1.可以很容易管理一组日志表。
比如可以将日志表按不同月份放到不同的表中,再用myisampack压缩,然后再用merge来接起来做一个表使用。
2.速度更快。
对于只读大表来说可以将其拆分为多个子表并存放在不同的硬盘上,再通过merge表将其合为一个逻辑表。
3.查询性能高。
对于已经明确查询的数据可以从merge所依赖的单个表查询,对于其他的查询则可以使用merge来进行(即既可以从子表单独查询又可以从merge表查询)。
可以创建多个merge表并且多个merge表可以依赖同一张表。
4.更容易维护、修复。
如果一个大表不拆分,则修复起来非常困难;若将大表拆分为多个小的子表,则这些子表因为比较小所以修复起来也容易。
5.快速整合多个表。
由于merge表使用的是各个子表的索引,所以它不需要维护索引,这样创建merge表就非常快。(但是在创建表的时候仍需指定索引,但是该索引并不会被创建)
6.如果将多个子表合并为一个大表,则使用merge会节省一大部分磁盘空间。
7.文件大小限制
单张MyISAM表大小受限于操作系统单个文件大小,但是使用merge可以使用多个MyISAM表
8.为表创建别名
也可以在merge表中union语句中只指定一张表来为Myisam表创建别名,并且对性能影响非常小(只是在读的时候会多一些间接调用和
memcpy()调用
)缺点:
1.merge表中只能是myisam表
2.并不是所有的myisam表特性都能在merge表中使用。
如:merge表不支持full-text全文索引
3.如果merge表是非临时表(临时表:create temporary table ...),则所依赖表都不能是临时表;如果merge表是临时表,则依赖表既可以是临时表也可以是非临时表。
4.使用的文件描述符比myiasm多
例如,10个客户端来使用一个有10个依赖子表的merge表时,则服务器会使用(10 x 10) + 10个文件描述符;其中每个客户端会开启10个文件描述符(因为有10个子表),并且会开启10个索引文件描述符来在多个客户端中共享使用。
5.索引查询更慢。
索引查询时,merge存储引擎会向所有子表发送一个查操作,并将最匹配索引种的值返回;当读下一个值时,merge表会从读缓存种读取下一个值,如果读缓存被用完,则读取下一个索引块。这使得merge表在进行eq_ref查询时比较慢,但是在ref查询时则不是很慢。
6.alter修改merge表引擎时,union种的表会丢失
7.merge表自己不维护唯一索引,只是在插入到对应表中时由对应表来确认单张表中是否唯一,而不能保证在所有子表中唯一
8.merge表以及所依赖的子表都不支持分区
9.drop子表中任何一个子表时,windows下必须flush_table merge表或者删除merge表才能删除
相关推荐
1.Merge(MRG_MyISAM)存储引擎类型允许你把许多结构相同的表合并为一个表。当从合并表中执行查询,从多个表返回的结果就像从一个表返回的结果一样。 2.要创建合并表的前提是每一个合并的表必须有同样的表定义(表结构...
MySQLMerge存储引擎是一种特殊的存储引擎,它允许将多个MyISAM表组合成一个逻辑上的大表,以便于管理和查询。这种引擎的主要目的是为了提供一种高效的方式来处理大量的分年度或分时间段的数据,例如日志记录或其他...
在实验中,我们使用 MySQL 8.0 查看了支持的存储引擎,包括 InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、EXAMPLE、FEDERATED、Archive、Merge 等。不同的存储引擎有不同的特点和使用场景,在选择存储引擎时需要根据...
除了 MyISAM 和 InnoDB 之外,MySQL 还提供了其他几个存储引擎,如 MEMORY、MERGE 等。 MEMORY 存储引擎是一种基于内存的存储引擎,数据存储在内存中,访问速度非常快,但是数据不是持久性的,服务器重启后数据将会...
如MEMORY存储引擎适合用于创建临时表,MERGE存储引擎适用于多个MyISAM表合并成为一个表,NDB存储引擎则适用于构建分布式数据库。 在未来的版本中,MySQL持续优化其存储引擎的特性,开发者需要关注新的特性更新,...
在日志记录、历史数据存储等场景下,MERGE引擎能提供很大的便利。 首先,要创建一个MERGE表,你需要有一组结构相同的MyISAM表。这些表的列定义、数据类型、索引顺序和方式都必须一致。例如,对于日志记录,我们可以...
MySQL支持多种存储引擎,如InnoDB、MyISAM、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等。 InnoDB是MySQL5.5之后的默认存储引擎,提供了具有提交、回滚和崩溃恢复能力的事务...
MySQL存储引擎是数据库管理系统的核心组件,它决定了数据如何在MySQL中存储、检索和管理。不同的存储引擎具有不同的特性和用途,以适应各种应用场景。在MySQL中,存储引擎主要负责数据的物理存储方式、事务处理、...
MySQL 5.7支持的存储引擎有:InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV和BLACKHOLE等。 可以利用语句:show engines; 查看系统所支持的引擎类型。;1.InnoDB存储引擎 InnoDB是事务型数据库的首选引擎...
MySQL提供了多种存储引擎,包括MyISAM、InnoDB、BDB、Memory、Merge、Archive、Federated、BLACKHOLE、Cluster/NDB、CSV和Example等。其中,InnoDB、NDB和BDB支持事务处理,提供了一定的数据一致性保障,而其他引擎...
本实验报告主要介绍 MySQL 中的存储引擎和数据库对象,涵盖了 MEMORY 存储引擎、MERGE 存储引擎、CHAR、VARCHAR、TEXT、BLOB 等类型的使用和特点,以及浮点数、定点数、日期类型的使用和设置规则。 一、MEMORY 存储...
对于MYSQL常见的数据库存储引擎做了介绍,DBD、HEAP、ISAM、MERGE、MyIAS、InnoDB以及Gemeni等
除了这些常见的引擎,还有如Archive用于长期归档数据,Merge用于合并多个MyISAM表,以及Federated用于连接远程MySQL服务器等。每个引擎的实现都值得深入研究,它们在处理数据存储、索引、并发控制等方面都有各自的...
5. **MERGE**:MERGE引擎允许将多个MyISAM表合并为一个逻辑表,这对于大数据仓库或需要批量处理大量相似数据的情况很有用。 6. **ARCHIVE**:存储引擎主要用于存储大量的历史记录,如日志或归档数据,不支持索引,...
5. **MERGE**:MERGE存储引擎允许将多个MyISAM表合并为一个逻辑表进行操作,这在需要分片或分区大量数据时非常有用。它不提供事务处理,适用于大数据量的非事务性应用。 6. **FEDERATED**:FEDERATED引擎允许在远程...
MySQL支持数个存储引擎作为对不同表的类型的处理器。...就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。 注释:MEMORY存储引擎正式地被确定为HEAP引擎。 ◆ InnoDB和B