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

    转载:https://www.cnblogs.com/hjw-zq/p/9804001.html

    写这篇文章,主要是因为面试的时候,面试官问我怎样统计所有的分表(假设按天分表)数据,我说了两种方案,第一种是最笨的方法,就是循环查询所有表数据(肯定不能采用);第二种方法是,利用中间件,每天定时把前一天的表数据查询出来存到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表和分表字段必须完全一致

  • 相关阅读:
    Mybatis深入浅出之工作原理
    Mybatis深入浅出之缓存机制
    Error :Unable to access jarfile *.jar
    Mysql与JDBC版本兼容性问题
    找工作的正确方法
    关于制作云主机基准镜像
    笔记分享
    Android4.0.1找不到R.java
    android 反编译出错 can not merge I and Z
    [论文理解] Improving the imporved training of Wasserstesin GANS: A consistency term and its dual effect
  • 原文地址:https://www.cnblogs.com/brithToSpring/p/13936828.html
Copyright © 2011-2022 走看看