Mysql中利用merge存储引擎来实现分表的例子

2011-03-01 21:53:35 作者:admin 来源: 浏览次数:0 网友评论 0

我觉得这种方法比较适合,那些没有事先考虑,而已经出现了得,数据查询慢的情况。这个时候如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码,因为程序里面的sql语句已经写好了,现在一张表要分成几十张表,甚至上百张

我觉得这种方法比较适合,那些没有事先考虑,而已经出现了得,数据查询慢的情况。这个时候如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码,因为程序里面的sql语句已经写好了,现在一张表要分成几十张表,甚至上百张表,这样 sql语句是不是要重写呢?举个例子,我很喜欢举子

mysql>show engines;的时候你会发现mrg_myisam其实就是merge。

       mysql> CREATE TABLE IF NOT EXISTS `user1`  
        ->   `id` int(11) NOT NULL AUTO_INCREMENT,  
        ->   `name` varchar(50) DEFAULT NULL,  
        ->   `sex` int(1) NOT NULL DEFAULT '0' 
        ->   PRIMARY KEY (`id`)  
        -> ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1  
       Query OK, rows affected (0.05 sec)  
  
       mysql> CREATE TABLE IF NOT EXISTS `user2`  
        ->   `id` int(11) NOT NULL AUTO_INCREMENT,  
        ->   `name` varchar(50) DEFAULT NULL,  
        ->   `sex` int(1) NOT NULL DEFAULT '0' 
        ->   PRIMARY KEY (`id`)  
        -> ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1  
       Query OK, rows affected (0.01 sec)  
  
       mysql> INSERT INTO `user1` (`name`, `sex`) VALUES('张映'0);  
       Query OK, row affected (0.00 sec)  
  
       mysql> INSERT INTO `user2` (`name`, `sex`) VALUES('tank'1);  
       Query OK, row affected (0.00 sec)  
  
       mysql> CREATE TABLE IF NOT EXISTS `alluser`  
        ->   `id` int(11) NOT NULL AUTO_INCREMENT,  
        ->   `name` varchar(50) DEFAULT NULL,  
        ->   `sex` int(1) NOT NULL DEFAULT '0' 
        ->   INDEX(id)  
        -> TYPE=MERGE union  =(user1,user2) INSERT_METHOD=LAST AUTO_INCREMENT=1  
       Query OK, rows affected, warning (0.00 sec)  
  
       mysql> select id,name,sex from alluser;  
       +----+--------+-----+  
      id name   sex  
       +----+--------+-----+  
       张映    
       tank      
       +----+--------+-----+  
      rows in set (0.00 sec)  
  
       mysql> INSERT INTO `alluser` (`name`, `sex`) VALUES('tank2'0);  
       Query OK, row affected (0.00 sec)  
  
       mysql> select id,name,sex from user2  
        ->  
       +----+-------+-----+  
      id name  sex  
       +----+-------+-----+  
       tank     
       tank2    
       +----+-------+-----+ 
   从上面的操作中,我不知道你有没有发现点什么?假如我有一张用户表user,有50W条数据,现在要拆成    二张表user1和user2,每张表25W条数据,

INSERT INTO user1(user1.id,user1.name,user1.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id <= 250000

INSERT INTO user2(user2.id,user2.name,user2.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id > 250000

这样我就成功的将一张user表,分成了二个表,这个时候有一个问题,代码中的sql语句怎么办,以前是一张表,现在变成二张表了,代码改动很大,这样给程序员带来了很大的工作量,有没有好的办法解决这一点呢?办法是把以前的user表备份一下,然后删除掉,上面的操作中我建立了一个alluser表,只把这个alluser表的表名改成user就行了。

关键词:Mysqlmerge分表

[错误报告] [推荐] [收藏] [打印] [关闭] [返回顶部]

  • 验证码:

最新图片文章

最新文章