• SQL分表


    一、为什么要水平分表?
    简而言之,当单表数据量过大时,无法对其进行有效的维护,以及查询速度严重变慢时,我们就需要对其时行水平分表.

    二、什么时候需要水平分表?
    在数据库结构的设计中,需要充分考虑后期数据的增长量和增长速度,如果后期的数据增长量过快,以及后期数据量巨大,就需要使用水平分表。

    三、怎样实现水平分表?
    其实水平分表的方法,很多,但个人觉得结合程序的增删改查,本篇介绍的方法MRG_MySIAM存储引擎(MERGE存储引擎)个人觉得还是比较简单方便的,虽然性能方面与其它分表技术相比可能不是第一,但就使用程序对其的操控性来说,个人觉得还是很不错的。

    四、Merge表的优点:
    A: 分离静态的和动态的数据
    B:利用结构接近的的数据来优化查询
    C: 查询时可以访问更少的数据
    D:更容易维护大数据集
    E: 可以通过修改.mrg文件来修改Merge表,当然也可以用alter进行修改,修改后要通过FLUSH TABLES刷新表缓存,此法可以动态增加减少子表

    五、分表步骤:

    1.首先创建一张MERGE存储类型的主表,

    drop table if exists weather_temp;
    create table weather_temp like weather_data;

    2.给weather_date字段设置索引

    alter table weather_temp add INDEX weather_date(weather_date);

    3.给weather_temp设置制定引擎engine=myisam

    alter table weather_temp ENGINE=MyISAM;

    4.然后再批量创建8张MyISAM存储类型的数据表。

    drop table if exists weather_temp_1;
    create table weather_temp_1 like weather_temp;
    drop table if exists weather_temp_2;
    create table weather_temp_2 like weather_temp;
    drop table if exists weather_temp_3;
    create table weather_temp_4 like weather_temp;
    drop table if exists weather_temp_4;
    create table weather_temp_4 like weather_temp;
    drop table if exists weather_temp_5;
    create table weather_temp_5 like weather_temp;
    drop table if exists weather_temp_6;
    create table weather_temp_6 like weather_temp;
    drop table if exists weather_temp_7;
    create table weather_temp_7 like weather_temp;
    drop table if exists weather_temp_8;
    create table weather_temp_8 like weather_temp;

    5.修改weather_temp设置联合查询
    alter table weather_temp ENGINE=MERGE UNION=(weather_temp_1,weather_temp_2,weather_temp_3,weather_temp_4,weather_temp_5,weather_temp_6,weather_temp_7,weather_temp_8) INSERT_METHOD=LAST;

    注意:总表只是一个外壳,存取数据发生在一个一个的分表里面。

    6.问题分析 (插入)
    主表插入:
    主表插入id自动分配不会重复 通过union来增加或删除分表来满足部分业务的需求,大多数按照时间来做分表。
    分表插入:
    插入分表后,查询主表会出现重复id。

    id不重复:第三方redis维护 数据库建表维护id。
    当id不被引用,可以直接插入分表不单独维护id。

    7.更新和删除
    建议以分表为主 更新或者删除分表的效率高时间短。

    8.删除表问题
    不能直接删除一个分表,这样会破坏merge表。正确的方法是:

    alter table weather_temp ENGINE=MRG_MyISAM UNION=(weather_temp_2) INSERT_METHOD=LAST;

    drop table weather_temp_2

  • 相关阅读:
    c# 三种取整方法 向上取整 向下取整 四舍五入
    Lambda表达式对DataRow处理
    Dapper数据库字段和model属性映射
    union limit
    北邮五十题
    搜索____深搜 学易错点
    动态规划____有重叠子问题的搜索,都可以转为记忆化搜索
    64位 __int 与 long long写法
    做做 卡特兰数 与 卡米歇尔数
    vector 有点麻烦啊 能简单点么?
  • 原文地址:https://www.cnblogs.com/hz04022016/p/7381193.html
Copyright © 2020-2023  润新知