MYSQL分区表功能测试简析

发表于:2014-11-18 10:47

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:杨桃    来源:51Testing软件测试网采编

  4.分区类型
  Range:基于一个连续区间的列值,把多行分配给分区;
  LIST:列值匹配一个离散集合;
  Hash:基于用户定义的表达式的返回值选择分区,表达式对要插入表中的列值进行计算。这个函数可以包含SQL中有效的,产生非负整
  数值的任何表达式。
  KEY:类似于HASH分区,区别在于KEY 分区的表达式可以是一列或多列,且MYSQL提供自身的HASH函数。
  5.RANGE分区MAXVALUE值 及加分区测试;
  创建表 PRANGE,最后分区一个分区值是MAXVALUE
  mysql> Create table prange(id int) engine=myisam partition by range(id)(partition po values less than(10), partition p1 values less than(20),partition p2 values less than maxvalue);
  Query OK, 0 rows affected (0.06 sec)
  加分区
  mysql> alter table prange add partition (partition p3 values less than (20));
  ERROR 1481 (HY000): MAXVALUE can only be used in last partition definition
  在分区P0前面加个分区
  mysql> alter table prange add partition (partition p3 values less than (1));
  ERROR 1481 (HY000): MAXVALUE can only be used in last partition definition
  说明有MAXVALUE值后,直接加分区是不可行的;
  创建表PRANGE1,无MAXVALUE值
  mysql> Create table prange1(id int) engine=myisam partition by range(id)(partition po values less than(10), partition p1 values less than(20),partition p2 values less than (30));  www.2cto.com
  Query OK, 0 rows affected (0.08 sec)
  从最大值后加个分区
  mysql> alter table prange1 add partition (partition p3 values less than (40));
  Query OK, 0 rows affected (0.02 sec)
  Records: 0 Duplicates: 0 Warnings: 0
  从分区的最小值前加个分区
  mysql> alter table prange1 add partition (partition p43 values less than (1));
  ERROR 1493 (HY000): VALUES LESS THAN value must be strictly increasing for each partition
  由此可见,RANGE 的分区方式在加分区的时候,只能从最大值后面加,而最大值前面不可以添加;
  6. 用时间做分区测试
  create table ptime2(id int,createdate datetime) engine=myisam partition by range (to_days(createdate))
  (partition po values less than (20100801),partition p1 values less than (20100901));
  Query OK, 0 rows affected (0.01 sec)
  mysql> create table ptime3(id int,createdate datetime) engine=myisam partition by range (createdate)
  (partition po values less than (20100801),partition p1 values less than (20100901));
  ERROR 1491 (HY000): The PARTITION function returns the wrong type
  直接使用时间列不可以,RANGE分区函数返回的列需要是整型。
  mysql> create table ptime6(id int,createdate datetime) engine=myisam partition by range (year(createdate))
  (partition po values less than (2010),partition p1 values less than (2011));
  Query OK, 0 rows affected (0.01 sec)
  使用年函数也可以分区。
  7.Mysql可用的分区函数
DAY()
DAYOFMONTH()
DAYOFWEEK()
DAYOFYEAR()
DATEDIFF()
EXTRACT()
HOUR()
MICROSECOND()
MINUTE()
MOD()
MONTH()
QUARTER()
SECOND()
TIME_TO_SEC()
TO_DAYS()
WEEKDAY()
YEAR()
YEARWEEK() 等
32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号