使用Merge引擎

使用Merge引擎

对于meger engine来说,但是底层是myisam的表结构,是由myisam的表拼接而成的。在磁盘上面表现为.frm的格式,还会有一个.mrg的文件,但是没有.MYD,.MYI的文件。.mrg就是一个清单,里面是底层表的名字。.frm.mrg文件都是放在数据目录里面。

平时去查询merge表,比如meger表是由a,b两张表构成,会去底层的A,B表的文件里面进行搜索。换句话说meger表底层就是myisam引擎表。访问的时候采用的是myisam的锁机制,也是将整表锁定的。

Myisam引擎,表的大小尺寸可能受限于操作系统大小。但是meger引擎可以超出最大的限制,因为可以是多张表组成。

因为meger引擎是由多张myisam的表组成,在进行表锁定的时候是一起将里面所有表进行锁定。这种情况下面,性能会更加的低下。比如meger是由a,b表组成,其中对a表进行锁定了那么b表也会锁定。但是死锁不会发生。

 

可以对meger表进行更新,删除,查询,插入。但是默认行为是不允许插入的,因为插入的数据不知道放在组合表的那张表里面。插入可以对其进行控制,是对第一个表插入还是对最后一个表插入还是不允许插入,缺省是不允许插入。

 使用Merge引擎

Meger也有一些缺点,因为打开的文件过多,增加了打开文件的描述,这会造成性能的开销过大。另外也会将其他的表锁定,这样影响并发。

Meger的索引查询会更加慢,比如说在a,b表里面查找年龄大于50的人,那么就会分别查两张表的索引以后建立到临时表里面,查完了a表的索引将结果缓存到临时表,查询了b表的索引缓存到临时表,最后根据临时表进行编列。这一系列的操作是十分耗时的,使用索引不仅不会速度快,效率还会下滑。