MYSQL分区表功能测试简析

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

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

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

  当然,还有FLOOR(),CEILING() 等,前提是使用这两个分区函数的分区健必须是整型。
  要小心使用其中的一些函数,避免犯逻辑性的错误,引起全表扫描。
  比如:
create table ptime11(id int,createdate datetime) engine=myisam partition by range (day(createdate)) (partition po values less than (15),partition p1 values less than (31));
mysql> insert into ptime11 values (1,'2010-06-17');
mysql> explain partitions select count(1) from ptime11 where createdate>'2010-08-17'\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: ptime11
partitions: po,p1
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 5
Extra: Using where
1 row in set (0.00 sec)
  8.主键及约束测试
  分区健不包含在主键内
  mysql> create table pprimary(id int,createdate datetime,primary key(id)) engine=myisam partition by range (day(createdate)) (partition po values less than (15),partition p1 values less than (31));  www.2cto.com
  ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function
  分区健包含在主键内
  mysql> create table pprimary1(id int,createdate datetime,primary key(id,createdate)) engine=myisam partition by range (day(createdate)) (partition po values less than (15),partition p1 values less than (31));
  Query OK, 0 rows affected (0.05 sec)
  说明分区健必须包含在主键里面。
  mysql> create table pprimary2(id int,createdate datetime,uid char(10),primary key(id,createdate),unique key(uid)) engine=myisam partition by range(to_days(createdate))(partition p0 values less than (20100801),partition p1 values less than (20100901));
  ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function
  说明在表上建约束索引会有问题,必须把约束索引列包含在分区健内。
  mysql> create table pprimary3(id int,createdate datetime,uid char(10),primary key(id,createdate),unique key(createdate)) engine=myisam partition by range(to_days(createdate))(partition p0 values less than (20100801),partition p1 values less than (20100901));
  Query OK, 0 rows affected (0.00 sec)
  虽然在表上可以加约束索引,但是只有包含在分区健内,这种情况在实际应用过程中会遇到问题,这个问题点在以后的MYSQL 版本中也许会改进。
  9.子分区测试
  只有RANGE和LIST分区才能有子分区,每个分区的子分区数量必须相同,
  mysql> create table pprimary7(id int,createdate datetime,uid char(10),primary key(id,createdate)) engine=myisam partition by range(to_days(createdate)) subpartition by hash(to_days(createdate))(partition p0 values less than (20100801) ( subpartition so,subpartition s1) ,partition p1 values less than (20100901) (subpartition s0,subpartition s1));  www.2cto.com
  ERROR 1517 (HY000): Duplicate partition name s1
  提示了重复的分区名称错误,这和MYSQL5.1帮助文档中的说明有出入,不知道是不是这个问题在某个小版本中修改过。
  10.MYSQL分区健NULL值测试;
  MYSQL将NULL值视为0.自动插入最小的分区中。
  11.MYSQL分区管理测试
  mysql> alter table pprimary4 truncate partition p1;
  ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'truncate partition p1' at line 1
  5.1版本中还不支持这个语法,5.5中已经支持,很好的一个命令;
  ALTER TABLE reorganize 可以重新组织分区。
33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号