mysql 获取分区的最大值_MySQL分区表测试「建议收藏」

mysql 获取分区的最大值_MySQL分区表测试「建议收藏」MYSQL分区表功能测试。1.查看Mysql版本是否支持分区SHOWVARIABLESLIKE’%partition%’;+——————-+——-+|Variable_name|Value|+——————-+——-+|have_partitioning|YES|+——————…

大家好,又见面了,我是你们的朋友全栈君。

MYSQL 分区表功能测试

1.查看Mysql版本是否支持分区

SHOW VARIABLES LIKE ‘%partition%’;

+——————-+——-+

| Variable_name     | Value |

+——————-+——-+

| have_partitioning | YES   |

+——————-+——-+

如果VALUE 为YES 则支持分区,

2.测试那种存储引擎支持分区

INOODB引擎

mysql> Create table engine1(id int) engine=innodb partition by range(id)(partition po values less than(10));

Query OK, 0 rows affected (0.01 sec)

MRG_MYISAM引擎

mysql> Create table engine2(id int) engine=MRG_MYISAM partition by range(id)(partition po values less than(10));

ERROR 1572 (HY000): Engine cannot be used in partitioned tables

blackhole引擎

mysql> Create table engine3(id int) engine=blackhole partition by range(id)(partition po values less than(10));

Query OK, 0 rows affected (0.01 sec)

CSV引擎

mysql> Create table engine4(id int) engine=csv partition by range(id)(partition po values less than(10));

ERROR 1572 (HY000): Engine cannot be used in partitioned tables

Memory引擎

mysql> Create table engine5(id int) engine=memory partition by range(id)(partition po values less than(10));

Query OK, 0 rows affected (0.01 sec)

federated引擎

mysql> Create table engine6(id int) engine=federated partition by range(id)(partition po values less than(10));

Query OK, 0 rows affected (0.01 sec)

archive引擎

mysql> Create table engine7(id int) engine=archive partition by range(id)(partition po values less than(10));

Query OK, 0 rows affected (0.01 sec)

myisam 引擎

mysql> Create table engine8(id int) engine=myisam partition by range(id)(partition po values less than(10));

Query OK, 0 rows affected (0.01 sec)

3.Mysql分区表,分区引擎测试

表分区的存储引擎相同

mysql> Create table pengine1(id int) engine=myisam partition by range(id)(partition po values less than(10) engine=myisam, partition p1 values less than(20) engine=myisam);

Query OK, 0 rows affected (0.05 sec)

表分区的存储引擎不同

mysql> Create table pengine2(id int) engine=myisam partition by range(id)(partition po values less than(10) engine=myisam, partition p1 values less than(20) engine=innodb);

ERROR 1497 (HY000): The mix of handlers in the partitions is not allowed in this version of MySQL

同一个分区表中的所有分区必须使用同一个存储引擎,并且存储引擎要和主表的保持一致。

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));

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() 等

当然,还有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));

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));

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 可以重新组织分区。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137586.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • opc服务器不显示目录,opc客户端搜不到opc服务器

    opc服务器不显示目录,opc客户端搜不到opc服务器opc客户端搜不到opc服务器内容精选换一换ELB可以针对客户访问的业务为访问者提供个性化的管理策略,制定策略之前需要获取来访者的真实IP。TOA内核模块主要用来获取ELB转化过的访问者真实IP地址(仅支持IPv4),该插件安装在ELB后端服务器。本文档仅适用于四层(TCP协议)服务,当客户需要在操作系统中编译TOA内核模块时,可参考本文档进行配置。Linux内核版本为2.6.32块存储调优主要…

    2022年6月20日
    35
  • intellij idea快速生成main方法、for循环、out输出

    intellij idea快速生成main方法、for循环、out输出点击这里查看<intellijidea使用教程汇总篇>1、System.out.println()输入sout,按下enter键,生成System.out.println()方法.sout—>soutv=System.out.println("变量名 = " + 变量)soutp—>System.out.println("")2、public…

    2022年5月6日
    81
  • SPSS聚类分析——一个案例演示聚类分…「建议收藏」

    SPSS聚类分析——一个案例演示聚类分…「建议收藏」本文实际为2010年5月8日完成并发布的,浏览量:7199,评论数:5。http://hi.baidu.com/datasoldier/item/37abae32474bf7f1a884289f在百度新版空间升级过程中,该篇文章丢失,今天,重新更新并发布,作为SPSS案例分析系列的第17篇文章。同时希望百度新版空间能不断完善,在升级过程中尽量避免出现文章丢失的现象。案例数据源:有20种

    2022年10月18日
    9
  • b站《史上最全unity3D教程》笔记1-04「建议收藏」

    b站《史上最全unity3D教程》笔记1-04「建议收藏」         

    2026年1月22日
    4
  • js中跳转_js跳转页面传递参数

    js中跳转_js跳转页面传递参数JS页面跳转大全所谓的js页面跳转就是利用javesrcipt对打开的页面ULR进行跳转,如我们打开的是A页面,通过javsrcipt脚本就会跳转到B页面。一、常规的JS页面跳转代码1、在原来的窗体中直接跳转用  window.location.href=”你所要跳转的页面”;  2、在新窗体中打开页面用:  window.open(‘你所要跳转的页面’);

    2022年8月13日
    8
  • 我的中国问题

    我的中国问题

    2022年1月15日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号