MySQL高级特性-合并表

1. Merge Tables

        如果愿意的话,可以把合并表看成一种较老的、有更多限制的分区表,但是它们也有自己的用处,并且能提供一些分区表不能提供的功能。

合并表实际是容纳真正的表的容器。可以使用特殊的UNION语法来CREATE TABLE。下面是一个合并表的例子:

mysql>   
CREATE TABLE t1(a INT NOT NULL PRIMARY KEY)ENGINE=MyISAM;    
mysql>   
CREATE TABLE t2(a INT NOT NULL PRIMARY KEY)ENGINE=MyISAM;    
mysql>   
INSERT INTO t1(a) VALUES(1),(2);   
mysql>   
INSERT INTO t2(a) VALUES(1),(2);    
mysql>   
CREATE TABLE mrg(a INT NOT NULL PRIMARY KEY)    ENGINE=MERGE UNION=(t1, t2) INSERT_METHOD=LAST;    
mysql> SELECT a FROM mrg;

+——+  
  |  a    |  

+——+  
  |   1  | 
  |   1  | 
  |   2  |  
  |   2  | 
 +——+ 

       注意到合并表包含的表列的数量和类型都是一样的,并且合并表上的索引也会在下属表上存在。这是创建合并表的要求。也要注意到在每个表的独有列上有主键,这会导致合并表有重复的行。这是合并表的一个局限:合并表内的每个表行为都很正常,但是它不会对下面的所有表进行强制约束。

  1. INSERT_METHOD=LAST

 指令告诉MySQL把所有的INSERT语句都发送到合并表的最后一个表上。定义FIRST或LAST是控制插入数据位置的唯一方式(但是也可以直接插入到下属表中)。

分区表可以更多地控制数据存放的位置。

下面的INSERT语句对合并表和下属表都可见:

mysql> INSERT INTO mrg(a) VALUES(3);    
mysql> SELECT a FROM t2;

 +—+  

  | a | 

 +—+ 

  | 1 | 

  | 2 |

  | 3 | 

 +—+ 

合并表还有其他有趣的特性和限制,比如删除合并表或它的某个下属表。删除合并表让所有的"子表"都变得不可访问,但是删除其中的某个子表有不同的影响,它的行为和操作系统有关。例如,在GNU/Linux上,子表的文件描述符还保持开启的状态,并且表还继续存在,但是只能从合并表中访问。

  1. mysql> DROP TABLE t1, t2;  mysql> SELECT a FROM mrg

 +——+ 

  | a     | 

 +——+ 

  |     1 | 

  |     1 |  

  |     2 |

  |     2 |

  |     3 | 

 +——+ 

还有一些另外的局限性和特殊行为。最好的办法是阅读手册,但是在这儿要说的是REPLACE并不能在所有的合并表上工作,并且AUTO_INCREMENT不会像你期望的那样工作。

2. 合并表对性能的影响

        MySQL对合并表的实现对性能有一些重要的影响。和其他MySQL特性一样,它在某些条件下性能会更好。下面是关于它的一些注意事项:

       1) 合并表比含有同样数据的非合并表需要更多的文件描述符。尽管合并表看上去是一个表,它实际是逐个打开了下属表。这样的结果就是单个表的缓存可以创建许多文件描述符。因此,即使已经配置了表的缓存,让服务器线程的文件描述符数量不要超过操作系统的限制,合并表仍然有可能导致超过这一限制。

        2) 创建合并表的CREATE语句不会检查下属表是否是兼容的。如果下属表的定义有轻微的不一样,MySQL会创建合并表,但是却无法使用。同样,如果在创建了一个有效的合并表之后对某个下属表进行了改变,它也会无法工作,并且会显示下面的错误信息:"ERROR 1168(HY000):无法打开定义不同的下属表,或者非MyISAM表,或者不存在的表"。

       3)访问合并表的查询访问了每一个下属表。这也许会使单行键查找比单个表慢。在合并表中限制下属表是一个好主意,尤其是它是联接中的第二个或以后的表。每次操作访问的数据越少,那么访问每个表的开销相对于整个操作而言就越重要。下面是一些如何使用合并表的注意事项:

       4)范围查找受访问所有下属表的开销的影响小于单个查找。

      对索引表的表扫描和对单个表一样快。

       一旦唯一键和主键查询成功,它们就立即停止。在这种情况下,服务器会挨个访问下属表,一旦查找到了值,就不会再查找更多的表。

下属表读取的顺序和CREAT TABLE语句中定义的一致。如果经常需要按照特定的顺序取得数据,可以利用这种特性使合并排序操作更快。

3. 合并表的长处

     合并表在处理数据方面既有积极的一面,也有消极的一面。

      1) 经典的例子就是日志记录。日志是只追加的,所以可以每天用一个表。每天创建新的表并把它加入到合并表中。也可以把以前的表从合并表中移除掉,把它转化为压缩的MyISAM表,再把它们加回到合并表中。

      2) 日志追加这并不是合并表的唯一用途。它们通常都被用于数据仓库程序,因为它的另一个长处就是管理大量的数据。在实际中不太可能管理一个TB级别的表,但是如果是由单个50GB的表组成的合并表,任务就会简单很多。

       当管理极其巨大的数据库时,考虑的绝不仅仅是常规操作。还要考虑崩溃与恢复。使用小表是很好的主意。检查和修复一系列的小表比起一个大表要快得多,尤其是大表和内存不匹配的时候。还可以并行地检查和修复多个小表。

       数据仓库中另外一个顾虑就是如何清理掉老的数据。对巨型表使用DELETE语句最佳状况下效率不高,而在最坏情况下则是一场灾难。但是更改合并表的定义是很简单的,可以使用DROP TABLE命令删除老的数据。这可以轻易地实现自动化。

     3) 合并表并非只对日志和大量数据有效。它可以方便地按需创建繁忙的表。创建和删除合并表的代价是很低的。索引可以像对视图使用UNION ALL命令那样使用合并表。但它的开销更低,因为服务器不会把结果放到临时表中然后再传递给客户端。这使得它对于报告和仓库化数据非常有用。例如,要创建一个每晚都会运行的任务,它会把昨天的数据和8天前、15天前、以及之前的每一周的数据进行合并。使用合并表就可以创建无须修改的查询,并且自动地访问合适的数据。甚至还可以创建临时合并表,这是视图无法做到的。

因为合并表没有隐藏下属的MyISAM表,所以它提供了一些分区表无法提供的特性:

一个MyISAM表可以包含很多合并表。

可以通过拷贝.frm、.MYI、.MYD文件在服务器之间拷贝下属表。

可以轻易地把更多的表添加到合并表中。这只需要创建一个新表并且更改合并定义即可。

可以创建只包含想要的数据的临时合并表,例如某个特定时间段的数据。这是分区表无法做到的。

如果想对某个表进行备份、恢复、更改、修复,或者其他的操作,可以把它从合并表中移除,完成所有的工作之后再把它加回来。

可以使用myisampack压缩某些或所有的下属表。

分区表正好相反,MySQL隐藏了分区表的分区,并只能通过分区表访问所有的分区

转自:http://blog.csdn.net/hguisu/article/details/7164356

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/3112

(0)
上一篇 2015-04-13 10:15
下一篇 2015-04-13 19:27

相关推荐

  • Linux yum客户端的配置及yum命令

    一、什么是yum我们在Linux系统上安装处理软件,一般是使用RPM,它是通过预先编译完成并且把软件打包为RPM文件格式后,再加以安装的一种方式,使用者只要拿到这个打包好的软件,然后将里头的文件放置到应该摆放的目录,这样就完成了安装。但是,由于有些软件是有依赖于其他软件的,当你要安装某个RPM类型的软件时,RPM会检验RPM软件数据库,它所依赖的相关软件包是…

    2017-06-11
  • SELinux详解及其优缺点

    SELinux简介:        SELinux:Secure Enahanced Linux 安全增强的Linux SELinux是2.6版本的Linux内核中提供的强制访问控制(MAC)系统。对于目前可用的Linux安全模块来说,SELinux是功能最全面,而且测试最充分的…

    Linux干货 2017-05-21
  • 8月3日作业

    课堂练习: 当用户xiaoming对/testdir 目录无执行权限时,意味着无法 做哪些操作? 不能进入目录,不能创建目录、文件 当用户xiaoqiang对/testdir 目录无读权限时,意味着无法做 哪些操作?  不能查看目录、文件 当用户wangcai 对/testdir 目录无写权限时,该目录下的只 读文件file1是否可修改和删除?&n…

    Linux干货 2016-08-07
  • 【N25第四周作业】grep

    文本处理工具: Linux上文本处理三剑客: grep, egrep, fgrep:文本过滤工具(模式:pattern)工具; grep:基本正则表达式,-E,-F egrep:扩展正则表达式, -G,-F grep:不支持正则表达式, sed:stream editor, 流编辑器;文本编辑工具; awk:…

    Linux干货 2016-12-18
  • Linux用户和组管理

    进程以其发起者的身份运行; 进程对文件的访问权限,取决于发起此进程的用户的权限;   系统用户:为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户;这类用户从不用登录系统;     groupadd命令:添加组   groupadd [选项] group_name   -g G…

    Linux干货 2016-11-21
  • HA Cluster 之 vrrp (keepalived)

      HA Cluster 之 vrrp (keepalived) 0x00 前言 0x01 VRRP 协议 VRRP 简介 VRRP 工作原理 VRRP负载分担方式的特点 VRRP 中的一些术语 0x02 keepalived 功用: 0x03 keepalived 配置 HA Cluster 的配置前提: 配置文件组件部分: 配置文件解析: 附:…

    Linux干货 2017-05-16