首页 > MySQL Partition > MySQL 5.5 表分区功能增强

MySQL 5.5 表分区功能增强

2009年12月26日 谭俊青 发表评论 阅读评论

MySQL5.1 引入表分区功能,使得MySQL在处理大表的能力上得到增强。使用过表分区功能的朋友应该知道,MySQL5.1中使用表分区的时候,对字段是有要求的,那就是必须是整数型,或者可以将其他类型的字段通过函数转换成整数型才可以。

/* with MySQL 5.1  ivan @ MySQL实验室(mysqlab.net/blog/) */
CREATE TABLE mysqlab_net
(
  ivan DATE
)
PARTITION BY RANGE (TO_DAYS(ivan))
(
  PARTITION p01 VALUES LESS THAN (TO_DAYS(’2007-08-08′)),
  PARTITION p02 VALUES LESS THAN (TO_DAYS(’2008-08-08′)),
  PARTITION p03 VALUES LESS THAN (TO_DAYS(’2009-08-08′)),
  PARTITION p04 VALUES LESS THAN (MAXVALUE));

SHOW CREATE TABLE mysqlab_netG
*************************** 1. row ***************************
       TABLE: mysqlab_net
CREATE TABLE: CREATE TABLE `mysqlab_net` (
  `ivan` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (TO_DAYS(ivan))
(PARTITION p01 VALUES LESS THAN (733261) ENGINE = InnoDB,
 PARTITION p02 VALUES LESS THAN (733627) ENGINE = InnoDB,
 PARTITION p03 VALUES LESS THAN (733992) ENGINE = InnoDB,
 PARTITION p04 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */

怎么样?读取的时候谁知道那个数字是多少?(不过也可以通过自定义函数实现还原)
MySQL5.5中加入了columns关键字,使得可读性好多了。看例子

/* with MySQL 5.5   ivan @ MySQL实验室(mysqlab.net/blog/) */
CREATE TABLE `mysqlab.net`
(
  ivan DATE
)
PARTITION BY RANGE  COLUMNS(ivan)
(
  PARTITION p01 VALUES LESS THAN (’2007-08-08′),
  PARTITION p02 VALUES LESS THAN (’2008-08-08′),
  PARTITION p03 VALUES LESS THAN (’2009-08-08′),
  PARTITION p04 VALUES LESS THAN (MAXVALUE);

SHOW CREATE TABLE `mysqlab.net`G
*************************** 1. row ***************************
       TABLE: mysqlab.net
CREATE TABLE: CREATE TABLE `mysqlab.net` (
  `ivan` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!50500 PARTITION BY RANGE  COLUMNS(ivan)
(PARTITION p01 VALUES LESS THAN (’2007-08-08′) ENGINE = InnoDB,
 PARTITION p02 VALUES LESS THAN (’2008-08-08′) ENGINE = InnoDB,
 PARTITION p03 VALUES LESS THAN (’2009-08-08′) ENGINE = InnoDB,
 PARTITION p04 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */

另外MySQL5.5表分区(partition) columns关键字还支持多字段,比如 partition by range columns(a,b);将支持清空指定的分区TRUNCATE PARTITION。MySQL5.5有望在明年(2010)夏季GA。另外MySQL5.5支持的半同步功能在高可用上的使用,让人非常期待!

Reference: MySQL 5.5 partitioning enhancements

Note:在使用表分区的时候,并不是分区越多越好,要根据情况而定,因为会出现意想不到的问题

Related posts:

  1. update更新数字主键的时候可能导致主从(master/slave)复制中断
  2. Innodb如何查看剩余表空间?
  3. 事务隔离级别导致锁级别的不同
  4. MySQL库目录下db.opt文件的作用
  5. Vertical Partitioning for MySQL(MySQL垂直分区)
  6. [MySQL5.1] Master上批量将Myisam引擎转Innodb
  7. MySQL Tips 实用的小技巧
分类: MySQL Partition 标签:
  1. robincui
    2009年12月31日01:53 | #1

    如果给含有有限个分区的一个表增加字段时候,可以有并行的参数的话,那我马上在所有新业务上推5.1。
    自己了解不多,只知道mysql好像还没有考虑像oracle那样制定一些参数,使得内部的一些操作可以并行。

  2. Williams Sang
    2012年6月29日16:44 | #2

    你好,想请问一下,我有double类型的字段如何转换成INT。差了好久都没发现方法。因为官方文档上对分区函数式有限制的。好像就只有 FLOOR ,MOD ,CEILING 三个函数可以处理数字。但是都会显示#1491 – The PARTITION function returns the wrong type

  1. 2010年4月21日12:48 | #1