• mysql表分区


    首先查看分区表信息

    
    

    SELECT table_name, partition_name, table_rows FROM information_schema.partitions WHERE table_name=’tablename’

    分区的方法:

    分区有二个方法: 水平分区、垂直分区

    === 水平分区的几种模式:===
    * Range(范围) – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代(1980′s)的数据,90年代(1990′s)的数据以及任何在2000年(包括2000年)后的数据。

    * Hash(哈希) – 这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如DBA可以建立一个对表主键进行分区的表。

    * Key(键值) – 上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。

    * List(预定义列表) – 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。

    * Composite(复合模式) – 很神秘吧,哈哈,其实是以上模式的组合使用而已,就不解释了。举例:在初始化已经进行了Range范围分区的表上,我们可以对其中一个分区再进行hash哈希分区。

    = 垂直分区(按列分)=
    一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。

    rege分区例子

    CREATE TABLE `xxxxxxxx` (     
    `crttm` int(11) NOT NULL,     
    `srvid` int(11) NOT NULL,     
    `evtid` int(11) NOT NULL,     
    `aid` int(11) NOT NULL,     
    `rid` int(11) NOT NULL,     
    `itmid` int(11) NOT NULL,     
    `itmnum` int(11) NOT NULL,     
    `gdtype` int(11) NOT NULL,     
    `gdnum` int(11) NOT NULL,     
    `islmt` int(11) NOT NULL,  
    KEY `crttm` (`crttm`),  
      KEY `itemid` (`itmid`),  
      KEY `srvid` (`srvid`),  
      KEY `gdtype` (`gdtype`)  
    ) ENGINE=myisam DEFAULT CHARSET=utf8  
    PARTITION BY RANGE (crttm)   
    (  
    PARTITION p201303 VALUES LESS THAN (unix_timestamp('2013-04-01')),  
    PARTITION p201304 VALUES LESS THAN (unix_timestamp('2013-05-01')),  
    PARTITION p201305 VALUES LESS THAN (unix_timestamp('2013-06-01')),  
    PARTITION p201306 VALUES LESS THAN (unix_timestamp('2013-07-01')),  
    PARTITION p201307 VALUES LESS THAN (unix_timestamp('2013-08-01')),  
    PARTITION p201308 VALUES LESS THAN (unix_timestamp('2013-09-01')),  
    PARTITION p201309 VALUES LESS THAN (unix_timestamp('2013-10-01')),  
    PARTITION p201310 VALUES LESS THAN (unix_timestamp('2013-11-01')),  
    PARTITION p201311 VALUES LESS THAN (unix_timestamp('2013-12-01')),  
    PARTITION p201312 VALUES LESS THAN (unix_timestamp('2014-01-01')),  
    PARTITION p201401 VALUES LESS THAN (unix_timestamp('2014-02-01'))  
    );  

    1. primary key和unique key必须包含在分区key的一部分,否则在创建primary key和unique index时会报”ERROR 1503 (HY000)“

     2. 范围分区添加分区只能在最大值后面追加分区
    3. 所有分区的engine必须一样
    4. 范围分区分区字段:integer、数值表达式、日期列,日期函数表达式(如year(),to_days(),to_seconds(),unix_timestamp())

    添加新的分区:

    alter table xxxxxxx add partition (partition p0 values less than(1991));  //只能添加大于分区键的分区  

    删除分区:

    alter table xxxxxxx drop partition p0; //可以删除任意分区  

    删除分区数据:

    alter table xxxxxx  truncate partition p1,p2;  
    alter table xxxxxx  truncate partition all;  
    或  
    delete from xxxxxx where separated < '2006-01-01' or (separated >= '2006-01-01' and separated<'2011-01-01'); 
    唯有热爱方能抵御岁月漫长。
  • 相关阅读:
    Python获取当前 年 月 日
    HTML5手机应用的最大优势就是可以在网页上直接调试和修改
    使用PostSharp在.NET平台上实现AOP
    HTML5的设计目的是为了在移动设备上支持多媒体
    中法两国还将在中非、东非携手加强基础设施建设、安全、金融、能源、维和护航、医药卫生和教育培训等领域全面展开合作
    中国“互联网+”战略与欧洲单一数字市场建设、欧洲智慧城市建设等项目
    全球价值链的分工,‘国际产能合作’将带动全球产业链的调整
    中国在全球经济格局以及产业链条上的地位已今非昔比
    Bitmap Image Graphics
    C#利用WebClient 两种方式下载文件
  • 原文地址:https://www.cnblogs.com/syq816/p/9778876.html
Copyright © 2020-2023  润新知