zoukankan      html  css  js  c++  java
  • 表的垂直拆分和水平拆分

    垂直拆分

    垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表

    通常我们按以下原则进行垂直拆分:

    1. 把不常用的字段单独放在一张表;

    2. 把text,blob等大字段拆分出来放在附表中;

    3. 经常组合查询的列放在一张表中;

    垂直拆分更多时候就应该在数据表设计之初就执行的步骤,然后查询的时候用jion关键起来即可;

    水平拆分

    水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。

    水平拆分的一些技巧

    1. 拆分原则 通常情况下,我们使用取模的方式来进行表的拆分;比如一张有400W的用户表users,为提高其查询效率我们把其分成4张表users1,users2,users3,users4 通过用ID取模的方法把数据分散到四张表内Id%4+1 = [1,2,3,4] 然后查询,更新,删除也是通过取模的方法来查询

        $_GET['id'] = 17,
        17%4 + 1 = 2,  
        $tableName = 'users'.'2'
        Select * from users2 where id = 17;

    在insert时还需要一张临时表uid_temp来提供自增的ID,该表的唯一用处就是提供自增的ID;

        insert into uid_temp values(null);

    得到自增的ID后,又通过取模法进行分表插入;

    注意,进行水平拆分后的表,字段的列和类型和原表应该是相同的,但是要记得去掉auto_increment自增长

    另外

    • 部分业务逻辑也可以通过地区,年份等字段来进行归档拆分;
    • 进行拆分后的表,只能满足部分查询的高效查询需求,这时我们就要在产品策划上,从界面上约束用户查询行为。比如我们是按年来进行归档拆分的,这个时候在页面设计上就约束用户必须要先选择年,然后才能进行查询;
    • 在做分析或者统计时,由于是自己人的需求,多点等待其实是没关系的,并且并发很低,这个时候可以用union把所有表都组合成一张视图来进行查询,然后再进行查询;
        Create view users as select from users1 union select from users2 union.........

    原文链接:https://www.kancloud.cn/thinkphp/mysql-design-optimalize/39326

  • 相关阅读:
    Spring Boot 使用 Dom4j XStream 操作 Xml
    Spring Boot 使用 JAX-WS 调用 WebService 服务
    Spring Boot 使用 CXF 调用 WebService 服务
    Spring Boot 开发 WebService 服务
    Spring Boot 中使用 HttpClient 进行 POST GET PUT DELETE
    Spring Boot Ftp Client 客户端示例支持断点续传
    Spring Boot 发送邮件
    Spring Boot 定时任务 Quartz 使用教程
    Spring Boot 缓存应用 Memcached 入门教程
    ThreadLocal,Java中特殊的线程绑定机制
  • 原文地址:https://www.cnblogs.com/gotodsp/p/6509798.html
Copyright © 2011-2022 走看看