zoukankan      html  css  js  c++  java
  • MySQL MERGE存储引擎

    写这篇文章,主要是因为面试的时候,面试官问我怎样统计所有的分表(假设按天分表)数据,我说了两种方案,第一种是最笨的方法,就是循环查询所有表数据(肯定不能采用);第二种方法是,利用中间件,每天定时把前一天的表数据查询出来存到mongodb,最后只查询mongodb。然后面试官问我还有没有比这个更好的方案,虽然没有给我解答,我回来自己在网上查询了一下,就是利用Merge存储引擎;

     1.创建三张表,分别为user_1,user_2,user_3

    CREATE TABLE `user_1` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `user_name` varchar(255) NULL ,
    `user_sex` varchar(255) NULL ,
    `user_birth_date` datetime NULL ,
    PRIMARY KEY (`id`)
    )ENGINE = MYISAM DEFAULT CHARSET=utf8mb4;

    CREATE TABLE `user_2` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `user_name` varchar(255) NULL ,
    `user_sex` varchar(255) NULL ,
    `user_birth_date` datetime NULL ,
    PRIMARY KEY (`id`)
    )ENGINE = MYISAM DEFAULT CHARSET=utf8mb4;

    CREATE TABLE `user_3` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `user_name` varchar(255) NULL ,
    `user_sex` varchar(255) NULL ,
    `user_birth_date` datetime NULL ,
    PRIMARY KEY (`id`)
    )ENGINE = MYISAM DEFAULT CHARSET=utf8mb4;

    插入表数据

    INSERT INTO user_1 (user_name,user_sex,user_birth_date) VALUES ('张1', '男', now());
    INSERT INTO user_1 (user_name,user_sex,user_birth_date) VALUES ('张2', '男', now());
    INSERT INTO user_1 (user_name,user_sex,user_birth_date) VALUES ('张3', '男', now());

    INSERT INTO user_2 (user_name,user_sex,user_birth_date) VALUES ('王1', '女', now());
    INSERT INTO user_2 (user_name,user_sex,user_birth_date) VALUES ('王2', '女', now());
    INSERT INTO user_2 (user_name,user_sex,user_birth_date) VALUES ('王3', '女', now());

    INSERT INTO user_3 (user_name,user_sex,user_birth_date) VALUES ('李1', '女', now());
    INSERT INTO user_3 (user_name,user_sex,user_birth_date) VALUES ('李2', '女', now());
    INSERT INTO user_3 (user_name,user_sex,user_birth_date) VALUES ('李3', '女', now());

    2.创建merge表

    CREATE TABLE `user_merge` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `user_name` varchar(255) NULL ,
    `user_sex` varchar(255) NULL ,
    `user_birth_date` datetime NULL ,
    PRIMARY KEY (`id`)
    )ENGINE = MERGE UNION = (user_1,user_2,user_3);

    然后查询该表,select * from user_merge 结果如下

    如果添加一张user_4表呢

    CREATE TABLE `user_4` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `user_name` varchar(255) NULL ,
    `user_sex` varchar(255) NULL ,
    `user_birth_date` datetime NULL ,
    PRIMARY KEY (`id`)
    )ENGINE = MYISAM DEFAULT CHARSET=utf8mb4;

    INSERT INTO user_4 (user_name,user_sex,user_birth_date) VALUES ('黄1', '女', now());
    INSERT INTO user_4 (user_name,user_sex,user_birth_date) VALUES ('黄2', '女', now());
    INSERT INTO user_4 (user_name,user_sex,user_birth_date) VALUES ('黄3', '女', now());

    ALTER TABLE user_merge UNION = (user_1,user_2,user_3,user_4);

    再次查询select * from user_merge 结果如下

    将4张表数据合并到一张表,然后我们只需查询user_merge表,即可得到我们想要的结果

    注意:

    1.MERGE存储引擎只能和MYISAM配合使用,也就是user_1,user_2,user_3,user_4必须指定ENGINE = MYISAM,否则查询user_merge会报错

    2.user_merge表和分表字段必须完全一致

  • 相关阅读:
    HDU 1285 确定比赛名次(拓扑排序模板)
    POJ 1679 The Unique MST(次小生成树)
    POJ 3026 Borg Maze(Prim+bfs求各点间距离)
    POJ 2349 Arctic Network(最小生成树+求第k大边)
    POJ 3169 Layout (spfa+差分约束)
    给定两个list A ,B,请用找出 A ,B中相同的元素,A ,B中不同的元素 ??
    什么是http协议??
    Python2中range 和xrange的区别??
    死锁 ??
    调度算法 ??
  • 原文地址:https://www.cnblogs.com/hjw-zq/p/9804001.html
Copyright © 2011-2022 走看看