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));  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() 等
当然,还有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 可以重新组织分区。
 
												
												
								- mysql innodb锁简析(2)
		
继续昨天的innodb锁的分析: 注:此博文参考一下地址,那里讲的也很详细.http://xm-king.iteye.com/blog/770721 mysql事务的隔离级别分为四种,隔离级别越高,数 ...
		 
						- mysql存储引擎简析
		
一.常见存储引擎特性 Innodb 具有提交.回滚和崩溃恢复能力的事务安全.支持外键.使用mvcc以及行锁来提供事务支持,因此支持高并发.适用于写频繁,并发率高的应用. Myisam 不支持事务和灾难 ...
		 
						- mysql innodb锁简析(1)
		
说好的每天一个技术博客,选了iteye,但是,那个界面真的好丑啊,丑的让我都没写下去的欲望了,所以,还是转移到博客园里面吧,虽然这里也是很丑的! 直接步入正题: 1. 数据库锁包括:读锁(可共享锁)和 ...
		 
						- MySQL 慢查询日志配置与简析
		
MySQL慢查询日志配置与简析 By:授客 QQ:1033553122   <1> 查看是否开启慢查询日志 SHOW VARIABLES LIKE 'slow%'; 说明: a. 如果sl ...
		 
						- Mysql中FIND_IN_SET()和IN区别简析
		
来源:http://www.jb51.net/article/125744.htm 测试SQL: CREATE TABLE `test` ( `id` int(8) NOT NULL auto_inc ...
		 
						- 《共享库PATH与ld.so.conf简析》
		
这是摘抄<共享库PATH与ld.so.conf简析>1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个 ...
		 
						- Linux 目录结构学习与简析 Part1
		
linux目录结构学习与简析 by:授客 QQ:1033553122 说明: /             linux系统目录树的起点 =============== /bin      User Bi ...
		 
						- OpenStack之Glance源码简析
		
Glance简介 OpenStack镜像服务器是一套虚拟机镜像发现.注册.检索. glance架构图: Glance源码结构: glance/api:主要负责接收响应镜像管理命令的Restful请求, ...
		 
						- 简析.NET Core 以及与 .NET Framework的关系
		
简析.NET Core 以及与 .NET Framework的关系 一 .NET 的 Framework 们 二 .NET Core的到来 1. Runtime 2. Unified BCL 3. W ...
		 
		
	
随机推荐
	
									- Exercise03_02
			
import java.util.Scanner; public class AdditionQuiz { public static void main(String[] args){ int nu ...
			 
						- Java学习笔记(6)
			
java是面向对象的语言. 对象:真实存在的唯一的事物. 类:实际就是对某种类型事物的共性属性与行为的抽取 面向对象的计算机语言的核心思想:找适合的对象做适合的事情. 如何找适合的对象呢: 1.sun ...
			 
						- 通俗解释遗传算法及其Matlab实现
			
早上再看一个APP推荐的文章,发现的. (1)初识遗传算法 遗传算法,模拟达尔文进化论的自然选择和遗传学机理的生物进化过程的计算模型,一种选择不断选择优良个体的算法.谈到遗传,想想自然界动物遗传是怎么 ...
			 
						- [转] C/C++中printf和C++中cout的输出格式
			
原文地址 一. Printf 输出格式 C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型,其中方括号[]中的项为可选项.各项的意义介绍如下:1.类型类型字符用以表示输出数 ...
			 
						- fedora25 采用二进制包安装mysql5.5.49
			
#添加用户和组 groupadd mysql useradd -s /sbin/nologin -g mysql -M mysql /etc/passwd id mysql #安装依赖包 [root@ ...
			 
						- spring+mybatis项目启动报错Initializing Spring root WebApplicationContext
			
这个问题很怪异,各种各样的情况都会导致这个问题的出现,主要是由于sping加载读取配置文件的时候出了问题.我在处理mybatis的时候出现了这个问题,后来排查发现,在mybatis的配置文件中如果有大 ...
			 
						- Yii2系列教程四:实现用户注册,验证,登录
			
上一篇写了一点点Yii2的数据库相关知识和强大的Gii,这一篇就如上一篇的最后所说的一样:在Yii2中实现用户的注册和登录. 你可以直接到Github下载源码,以便可以跟上进度,你也可以重头开始,一步 ...
			 
						- cadvisor详解
			
一. cadvisor和k8s的耦合 cadvisor是一个谷歌开发的容器监控工具,它被内嵌到k8s中作为k8s的监控组件.现在将k8s中的cadvisor实现分析一下. k8s中和cadvisor的 ...
			 
						- 【面试问题】—— 2019.3月前端面试之JS原理&CSS基础&Vue框架
			
前言:三月中旬面试了两家公司,一家小型公司只有面试,另一家稍大型公司笔试之后一面定夺.笔试部分属于基础类型,网上的复习资料都有. 面试时两位面试官都有考到一些实际工作中会用到,但我还没接触过的知识点. ...
			 
						- (转)spring boot实战(第六篇)加载application资源文件源码分析
			
原文:http://blog.csdn.net/liaokailin/article/details/48878447