暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql merge 分区

秦梁的小站 2018-06-09
178

1.测试数据

1.usera 插入500w数据
2.userb 插入500w数据
3.userall (主表)
    usert1 (子表) 插入250w数据
    usert2 (子表) 插入250w数据
4.userall2 (主表)
    usert3 (子表) 插入250w数据
    usert4 (子表) 插入250w数据

  • 建表语句

  1. CREATE TABLE usertb(

  2.    id serial,

  3.    uname  varchar(20) ,

  4.    ucreatetime  datetime  ,

  5.    age int(11))

  6. ENGINE=MYISAM

  7. DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci

  8. AUTO_INCREMENT=1

  9. ROW_FORMAT=COMPACT;

  1. CREATE TABLE usertall(

  2.    id serial,

  3.    uname  varchar(20) ,

  4.    ucreatetime  datetime  ,

  5.    age int(11))

  6. ENGINE=MERGE union(usert1,usert2) insert_method=last

  7. DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci

  8. AUTO_INCREMENT=1

  9. ROW_FORMAT=COMPACT;

  • 使用存储过程插入测试数据

  1. delimiter $$

  2. SET AUTOCOMMIT = 0$$

  3. create  procedure test1()

  4. begin

  5. declare v_cnt decimal (10)  default 0 ;

  6. dd:loop

  7.        insert into userta values

  8.        (null,'用户1',now(),20),

  9.        (null,'用户2',now(),20),

  10.        (null,'用户3',now(),20),

  11.        (null,'用户4',now(),20),

  12.        (null,'用户5',now(),20),

  13.        (null,'用户6',now(),20),

  14.        (null,'用户7',now(),20),

  15.        (null,'用户8',now(),20),

  16.        (null,'用户9',now(),20),

  17.        (null,'用户0',now(),20);

  18.        commit;

  19.        set v_cnt = v_cnt+10 ;

  20.            if  v_cnt = 5000000 then leave dd;

  21.            end if;

  22.        end loop dd ;

  23. end;$$

  24. delimiter;

  • 调用存储过程

  1. call test1;

  • 测试查询时间

  1. select * from userta;       --3.63s

注意点

1.分表必须保证主表和子表表结构一致,否则报错
Error Code : 1168 Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist


文章转载自秦梁的小站,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论