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;

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

  • 相关阅读:
    安全测试全面总结3基于OWASPZAP进行接口安全测试
    wiki还是复利的思想,不断的更新迭代,需要学习并实践
    redis竟然还有哨兵模式,所以更加不能再扩展了,必须要在已有的基础上进行深挖!!!
    什么是SonarQube?
    安全测试全面总结1OWASP服务端安全测试体系
    jmeter全面总结4压测结果分析
    安全测试全面总结7 XSS漏洞
    jmeter全面总结5jmeter分布式
    jmeter全面总结1介绍和安装
    pytest的inifile文件配置
  • 原文地址:https://www.cnblogs.com/vofill/p/9887775.html
Copyright © 2011-2022 走看看