Chinaunix首页 | 论坛 | 博客
  • 博客访问: 281068
  • 博文数量: 90
  • 博客积分: 41
  • 博客等级: 民兵
  • 技术积分: 400
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-07 11:52
文章分类
文章存档

2014年(11)

2013年(3)

2012年(69)

2011年(7)

分类: Mysql/postgreSQL

2014-05-29 18:05:21

原文地址:MySQL分区表 作者:mic0601

查看分区情况


点击(此处)折叠或打开

  1. SELECT * FROM information_schema.PARTITIONS WHERE table_name='table_name'

PARTITION_NAME:分区的名称

PARTITION_METHOD:分区的类型

TABLE_ROWS:分区数据条数


RANGE分区:

点击(此处)折叠或打开

  1. create table t (
  2. id int) engine=innodb
  3. partition by range (id) (
  4. partition p0 values less than (10), --id小于10的加入p0分区
  5. partition p1 values less than (20));--id大于等于10小于20的加入p1分区

增加分区

点击(此处)折叠或打开

  1. alter table r add partition (partition p2 values less than maxvalue); --所有大于等于20的加入p2分区


点击(此处)折叠或打开

  1. CREATE TABLE `w` (
  2.   `money` INT(10) UNSIGNED NOT NULL,
  3.   `date` DATETIME DEFAULT NULL
  4. ) ENGINE=INNODB DEFAULT CHARSET=utf8
  5.  PARTITION BY RANGE (YEAR(DATE)) --定义的规则也可以是函数
  6. (PARTITION p2010 VALUES LESS THAN (2010),
  7.  PARTITION p2001 VALUES LESS THAN (2011),
  8.  PARTITION p2012 VALUES LESS THAN (2012));

  删除分区

 


点击(此处)折叠或打开

  1. alter table w drop partition p2010;

--删除分区,则分区的数据也删除

----------------------------------------------------------------------


 LIST分区

点击(此处)折叠或打开

  1. CREATE TABLE m (
  2. a INT,
  3. b INT)ENGINE=innnodb
  4. PARTITION BY LIST (b)(
  5. PARTITION p0 VALUES IN (1,2,3,4,5),
  6. PARTITION p1 VALUES IN (6,7,8,9,10));

  7. insert into m values (1,6),(2,7),(3,11),(4,9)

--插入的值(3,11)不符合,如果是innodb引擎,后面(4,9)符合条件不会插入表中,

   如果是myisam引擎,后面(4,9)符合条件则会插入表中

   

----------------------------------------------------------------------

  

HASH分区

点击(此处)折叠或打开

  1. CREATE TABLE m_hash (
  2. a INT,
  3. b DATETIME)ENGINE=innnodb
  4. PARTITION BY HASH (YEAR(b)) --"partition by hash (expr)" expr是一个返回整数的表达式
  5. PARTITIONS 4; --表示要被分割成分区的数量,没有则默认是1

 如:加入分区的算法mod(expr,分区数量4)=0 则加入p0

点击(此处)折叠或打开

  1. PARTITION BY LINEAR HASH (YEAR(b))

--与hash只是算法不同,返回是值是一样的

----------------------------------------------------------------------


COLUMNS分区 

mysql5.5开始支持,视为RANGE分区和LIST分区的一种进化,支持INT,SMALLINT,TINYINT,BIGINT.DATE,DATETIME.CHAR,VARCHAR,BINARY,VARBINARY类型

点击(此处)折叠或打开

  1. CREATE TABLE t_columns_range(
  2. a INT,
  3. b DATETIME) ENGINE=INNODB
  4. PARTITION BY RANGE COLUMNS (b) --也可以PARTITION BY LESS COLUMNS (b)
  5. (PARTITION p0 VALUES LESS THAN('2009-01-01'),
  6. PARTITION p1 VALUES LESS THAN('2010-01-01'));

阅读(3276) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~