zoukankan      html  css  js  c++  java
  • mysql 分表

    分表可以适当的减轻数据库压力,当一个表数据很庞大的时候,对其进行操作的时间就会越长。

    分表设计原则:

    1. 此表类似于SQL中的union机制。
    2. 此表结构必须与基本表完全一致,包括列名、顺序。UNION表必须同属一个DATABASE。
    3. 基本表类型必须是MyISAM。
    4. 可以通过修改.mrg文件来修改MERGE表,每个基本表的名字占一行。注意:修改后要通过FLUSH TABLES刷新表缓存。
    5. 对基本表的更改可以直接反映在此表上。
    6. INSERT_METHOD的取值可以是: 0 不允许插入 FIRST 插入到UNION中的第一个表 LAST 插入到UNION中的最后一个表。(4.0之后可用)
    7. 定义在它上面的约束没有任何作用,约束是由基本表控制的,例如两个基本表中存在着同样的一个Key值,那么在MERGE表中会有两个一样的Key值。

    下面利用merge存储引擎来实现分表

    1、创建子表,设计一个表名统一规则:

    DROP TABLE IF EXISTS `UserTest1`;
    CREATE TABLE `UserTest1`
    (
        `Id`            BIGINT                AUTO_INCREMENT  NOT NULL,
        `Name`            VARCHAR(50)            NULL,
        `Sex`            VARCHAR(50)            NULL,
        PRIMARY KEY (Id)
    ) ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

    利用like快速创建其他子表:

    CREATE TABLE `UserTestn` LIKE `UserTest1`;

    插入数据:

    NSERT INTO `UserTest1` (`Name`, `Sex`) VALUES('测试人员1', 0);

    利用select给其他子表快速插入数据:

    INSERT INTO `UserTestn`(`Name`, `Sex`) SELECT `Name` ,`Sex` FROM `UserTest1`;

    子表创建结束后,创建主表

    DROP TABLE IF EXISTS `AllUserTest`;
    CREATE TABLE `AllUserTest`
    (
        `Id`            BIGINT                AUTO_INCREMENT  NOT NULL,
        `Name`            VARCHAR(50)            NULL,
        `Sex`            VARCHAR(50)            NULL,
        INDEX (Id)
    ) ENGINE=MERGE UNION=(`UserTest1`,`UserTest2`,...,`UserTestn`) INSERT_METHOD=LAST CHARSET=utf8 AUTO_INCREMENT=1;

    当查询数据的时候,通过一定的算法根据需求,查询对应的表,可通过查询主表查询所有的数据,由于查询主表的数据没有唯一标识字段,需要在设计分表的时候考虑到字段唯一性

  • 相关阅读:
    腾讯Techo开发者大会PPT分享
    构建三维一体立体化监控,看这一篇就够了!
    ACOUG 联合创始人盖国强:万象更新,数据库技术和生态的发展演进
    全局配置项set_global_options 支持的opts
    InitOpts:初始化配置项:
    数据结构第四章树和森林,期末不挂科指南,第7篇
    Netflix:当你按下“播放”的时候发生了什么?
    Netflix:当你按下“播放”的时候发生了什么?
    搭建vsftpd文件服务器并创建虚拟用户
    搭建vsftpd文件服务器并创建虚拟用户
  • 原文地址:https://www.cnblogs.com/vofill/p/9887775.html
Copyright © 2011-2022 走看看