zoukankan      html  css  js  c++  java
  • 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'); 
    唯有热爱方能抵御岁月漫长。
  • 相关阅读:
    vim 学习笔记系列(前言)
    12306网站推出图片验证 反破解
    如何提升电脑的速度(五年时间收集各家精华,绝对史上最全)
    电脑维修和维护 毕业总结及经验报告
    留学生 电脑安全与维护手册 (留学须知)
    Progress数据库配置与应用
    润乾报表与DERBY数据库的创建连接详解
    图形报表部署在Linux下出现乱码解决办法
    sqlserver为数据库表增加自增字段
    五种常用web服务器jvm参数设置
  • 原文地址:https://www.cnblogs.com/syq816/p/9778876.html
Copyright © 2011-2022 走看看