mysql 分区之RANGE && HASH

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

从Mysql5.1之后,分区功能出现了,表分区就像是将一个大表分成了若干个小表,用户在执行查询的时候无需进行全表扫描,只需要对满足要求的表分区中进行查询即可,极大的提高了查询速率,另外,表分区的实现也方便了对数据的管理,比如产品需要删除去年的所有数据,那么只需要将去年数据所在的表分区删除即可。

mysql 表分区有很多种,详情点击:http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html

此处就讨论RANGE 跟HASH 以及RANGE 结合HASH进行的分区操作。

注意:所有的表分区使用的列均需要使用源表中存在的主键或者唯一索引列,否则创建失败,如果源表中本来就不存在任何的主键或者唯一索引列,那么可以在分区的时候根据需要选取任意列。

RANGE:顾名思义,通过确定选取列的值的范围的方式进行分区。

如下是创建普通表的语句:

为了实验的方便,此处date 字段使用的时间类型为:DATETIME,而非TIMESTAMP,原因是TIMESTAMP不支持在分区的时候使用YEAR(),MONTH(),TO_DAYS()等操作,只能使用UNIX_TIMSTAMP()函数,所以在设计表的时候需要考虑到这点:

1
CREATE  TABLE t1  (  id  INT,  date  DATETIME DEFAULT CURRENT_TIMESTAMP) ENGINE=Innodb;

插入一些测试数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql>  SELECT  FROM  t1;
+ ------+---------------------+
| id   |  date                 |
+ ------+---------------------+
|    1 | 2013-05-23 12:59:39 |
|    2 | 2013-05-23 12:59:43 |
|    3 | 2013-05-23 12:59:44 |
|    4 | 2013-07-04 19:35:45 |
|    5 | 2014-04-04 19:35:45 |
|    6 | 2014-05-04 19:35:45 |
|    7 | 2015-05-04 19:35:45 |
|    8 | 2015-05-05 19:35:45 |
|    9 | 2017-05-05 19:35:45 |
|   10 | 2018-05-05 19:35:45 |
+ ------+---------------------+
10  rows  in  set  (0.00 sec)

查看查询语句执行计划:发现进行了全表扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> EXPLAIN  SELECT  FROM  t1;
+ ----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type |  table  | type | possible_keys |  key   | key_len | ref  |  rows  | Extra |
+ ----+-------------+-------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | t1    |  ALL   NULL           NULL  NULL     NULL  |   10 |  NULL   |
+ ----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row  in  set  (0.00 sec)
mysql> EXPLAIN  SELECT  FROM  t1  WHERE  date  >=  '2014-03-05 19:00:12'
     ->  AND  date  <=  '2016-03-05 18:45:12' ;
+ ----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type |  table  | type | possible_keys |  key   | key_len | ref  |  rows  | Extra       |
+ ----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | t1    |  ALL   NULL           NULL  NULL     NULL  |   10 | Using  where  |
+ ----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row  in  set  (0.00 sec)

创建新表t2,并根据年份进行表分区

1
2
3
4
5
6
7
8
9
10
mysql>  CREATE   TABLE  t2  ( id  INT date  DATETIME  DEFAULT  CURRENT_TIMESTAMP ) ENGINE=Innodb
     ->     PARTITION  BY  RANGE ( YEAR ( date )) (
     ->     PARTITION p2013  VALUES  LESS THAN(2014),
     ->     PARTITION p2014  VALUES  LESS THAN(2015),
     ->     PARTITION p2015  VALUES  LESS THAN(2016),
     ->     PARTITION p2016  VALUES  LESS THAN(2017),
     ->     PARTITION p2017  VALUES  LESS THAN(2018),
     ->     PARTITION p2099  VALUES  LESS THAN MAXVALUE
     -> ) ;
Query OK, 0  rows  affected (2.47 sec)

查看数据分布状态并导入t1表的数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mysql>  SELECT  table_name,partition_name,table_rows  FROM  information_schema.PARTITIONS   WHERE   table_schema= database ()  AND  table_name= 't2' ;
+ ------------+----------------+------------+
| table_name | partition_name | table_rows |
+ ------------+----------------+------------+
| t2         | p2013          |          0 |
| t2         | p2014          |          0 |
| t2         | p2015          |          0 |
| t2         | p2016          |          0 |
| t2         | p2017          |          0 |
| t2         | p2099          |          0 |
+ ------------+----------------+------------+
rows  in  set  (0.00 sec)
mysql>  SELECT  FROM  t2;
Empty  set  (0.00 sec)
mysql> EXPLAIN  SELECT  FROM  t2;
+ ----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type |  table  | type | possible_keys |  key   | key_len | ref  |  rows  | Extra |
+ ----+-------------+-------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | t2    |  ALL   NULL           NULL  NULL     NULL  |    6 |  NULL   |
+ ----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row  in  set  (0.00 sec)
mysql>  INSERT  INTO  t2  SELECT  FROM  t1;
Query OK, 10  rows  affected (0.36 sec)
Records: 10  Duplicates: 0  Warnings: 0



再次查看数据分部状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mysql>  SELECT  FROM   t2;
+ ------+---------------------+
| id   |  date                 |
+ ------+---------------------+
|    1 | 2013-05-23 12:59:39 |
|    2 | 2013-05-23 12:59:43 |
|    3 | 2013-05-23 12:59:44 |
|    4 | 2013-07-04 19:35:45 |
|    5 | 2014-04-04 19:35:45 |
|    6 | 2014-05-04 19:35:45 |
|    7 | 2015-05-04 19:35:45 |
|    8 | 2015-05-05 19:35:45 |
|    9 | 2017-05-05 19:35:45 |
|   10 | 2018-05-05 19:35:45 |
+ ------+---------------------+
10  rows  in  set  (0.00 sec)
mysql>  SELECT  table_name,partition_name,table_rows  FROM  information_schema.PARTITIONS   WHERE   table_schema= database ()  AND  table_name= 't2' ;
+ ------------+----------------+------------+
| table_name | partition_name | table_rows |
+ ------------+----------------+------------+
| t2         | p2013          |          4 |
| t2         | p2014          |          2 |
| t2         | p2015          |          2 |
| t2         | p2016          |          0 |
| t2         | p2017          |          1 |
| t2         | p2099          |          1 |
+ ------------+----------------+------------+
rows  in  set  (0.00 sec)


   查看全表扫描行数情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> EXPLAIN  SELECT  FROM  t2\G
*************************** 1. row ***************************
            id: 1
   select_type: SIMPLE
         table : t2
          type:  ALL
possible_keys:  NULL
           key NULL
       key_len:  NULL
           ref:  NULL
          rows : 11
         Extra:  NULL
1 row  in  set  (0.00 sec)

进行where子句过滤后:

1
2
3
4
5
6
7
mysql> EXPLAIN PARTITIONS  SELECT  FROM  t2  WHERE  date  >=  '2014-03-05 19:00:12'  AND  date  <=  '2016-03-05 18:45:12' ;
+ ----+-------------+-------+-------------------+------+---------------+------+---------+------+------+-------------+
| id | select_type |  table  | partitions        | type | possible_keys |  key   | key_len | ref  |  rows  | Extra       |
+ ----+-------------+-------+-------------------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | t2    | p2014,p2015,p2016 |  ALL   NULL           NULL  NULL     NULL  |    5 | Using  where  |
+ ----+-------------+-------+-------------------+------+---------------+------+---------+------+------+-------------+
1 row  in  set  (0.00 sec)

可以发现,进行分区之后没有全表扫描,扫描的分区也仅仅是在时间范围内的。



HASH 分区

HASH分区的主要作用是将数据进行均匀分部:比如将一年的数据分成12个分区

1
2
mysql>  CREATE  TABLE  t3 (id  INT , date  DATETIME  DEFAULT  CURRENT_TIMESTAMP ) PARTITION  BY  HASH( MONTH ( date )) PARTITIONS  12;
Query OK, 0  rows  affected (4.51 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql>  SELECT  table_name,partition_name,table_rows  FROM  information_schema.PARTITIONS   WHERE   table_schema= database ()  AND  table_name= 't3' ;
+ ------------+----------------+------------+
| table_name | partition_name | table_rows |
+ ------------+----------------+------------+
| t3         | p0             |          0 |
| t3         | p1             |          0 |
| t3         | p2             |          0 |
| t3         | p3             |          0 |
| t3         | p4             |          0 |
| t3         | p5             |          0 |
| t3         | p6             |          0 |
| t3         | p7             |          0 |
| t3         | p8             |          0 |
| t3         | p9             |          0 |
| t3         | p10            |          0 |
| t3         | p11            |          0 |
+ ------------+----------------+------------+
12  rows  in  set  (0.00 sec)
1
2
3
mysql> INSERT INTO t3 SELECT * FROM t2;
Query OK, 10 rows affected (0.24 sec)
Records: 10  Duplicates: 0  Warnings: 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> SELECT table_name,partition_name,table_rows FROM information_schema.PARTITIONS  WHERE  table_schema=database() AND table_name= 't3' ;
+------------+----------------+------------+
| table_name | partition_name | table_rows |
+------------+----------------+------------+
| t3         | p0             |          0 |
| t3         | p1             |          0 |
| t3         | p2             |          0 |
| t3         | p3             |          0 |
| t3         | p4             |          1 |
| t3         | p5             |          8 |
| t3         | p6             |          0 |
| t3         | p7             |          1 |
| t3         | p8             |          0 |
| t3         | p9             |          0 |
| t3         | p10            |          0 |
| t3         | p11            |          0 |
+------------+----------------+------------+
12 rows  in  set  (0.01 sec)



数据分部的算法:如id 4的那行

1
2
3
4
5
6
7
mysql>  SELECT  MOD( MONTH ( '2013-07-04 19:35:45' ),12);
+ --------------------------------------+
| MOD( MONTH ( '2013-07-04 19:35:45' ),12) |
+ --------------------------------------+
|                                    7 |
+ --------------------------------------+
1 row  in  set  (0.00 sec)

RANGE && HASH 创建子分区

1
2
3
4
5
6
7
8
9
10
11
mysql> CREATE TABLE t4( id  INT , date   DATETIME  DEFAULT CURRENT_TIMESTAMP)
     -> PARTITION BY RANGE(YEAR( date ))
     -> SUBPARTITION BY HASH(MONTH( date ))
     -> SUBPARTITIONS 12 (
     -> PARTITION p2013 VALUES LESS THAN (2014),
     -> PARTITION p2014 VALUES LESS THAN (2015),
     -> PARTITION p2015 VALUES LESS THAN (2016),
     -> PARTITION p2016 VALUES LESS THAN (2017),
     -> PARTITION p2017 VALUES LESS THAN (2018),
     -> PARTITION p2099 VALUES LESS THAN  MAXVALUE);
Query OK, 0 rows affected (26.10 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
mysql>  SELECT  table_name,partition_name,table_rows  FROM  information_schema.PARTITIONS   WHERE   table_schema= database ()  AND  table_name= 't4' ;
+ ------------+----------------+------------+
| table_name | partition_name | table_rows |
+ ------------+----------------+------------+
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
+ ------------+----------------+------------+
72  rows  in  set  (0.02 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
[root@server ~] # ls -l /data/test/t4*
-rw-rw----. 1 mysql mysql  8586 May 23 13:36  /data/test/t4 .frm
-rw-rw----. 1 mysql mysql  1396 May 23 13:36  /data/test/t4 .par
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp0.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp10.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp11.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp1.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp2.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp3.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp4.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp5.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp6.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp7.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp8.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2013#SP#p2013sp9.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp0.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp10.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp11.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp1.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp2.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp3.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp4.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp5.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp6.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp7.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp8.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2014#SP#p2014sp9.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp0.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp10.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp11.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp1.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp2.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp3.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp4.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp5.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp6.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp7.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp8.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2015#SP#p2015sp9.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp0.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp10.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp11.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp1.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp2.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp3.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp4.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp5.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp6.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp7.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp8.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2016#SP#p2016sp9.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp0.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp10.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp11.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp1.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp2.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp3.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp4.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp5.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp6.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp7.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp8.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2017#SP#p2017sp9.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp0.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp10.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp11.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp1.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp2.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp3.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp4.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp5.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp6.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp7.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp8.ibd
-rw-rw----. 1 mysql mysql 98304 May 23 13:36  /data/test/t4 #P#p2099#SP#p2099sp9.ibd

以上命令用于查看子分区所有信, 下面的命令用于插入值,查看数据分布状况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
mysql>  INSERT  INTO   t4   SELECT  FROM  t3;
Query OK, 10  rows  affected (0.33 sec)
Records: 10  Duplicates: 0  Warnings: 0
mysql>  SELECT  table_name,partition_name,table_rows  FROM  information_schema.PARTITIONS   WHERE   table_schema= database ()  AND  table_name= 't4' ;
+ ------------+----------------+------------+
| table_name | partition_name | table_rows |
+ ------------+----------------+------------+
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          3 |
| t4         | p2013          |          0 |
| t4         | p2013          |          1 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2013          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          1 |
| t4         | p2014          |          1 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2014          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          2 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2015          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2016          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          1 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2017          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          1 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
| t4         | p2099          |          0 |
+ ------------+----------------+------------+
72  rows  in  set  (0.00 sec)

如果在根据时间进行分区的时候,主键为id,但是时间在业务上不会完全唯一,比如用普通的DATETIME或者TIMESTAMP,很有可能在同一个时间插入新记录,此时可能需要用到微秒:

1
2
CREATE TABLE  t15 ( id  INT(10), date  datetime(6) DEFAULT CURRENT_TIMESTAMP(6));
设置微秒,用于分区使用,分区列需要使用存在的主键或者唯一索引

设置好了之后,就可以将时间设置为唯一索引了,这样就可以在主键存在的情况下面使用时间作为分区列了。










本文转自 暗黑魔君 51CTO博客,原文链接:http://blog.51cto.com/clovemfong/1208444,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
197 0
|
2月前
|
DataWorks 安全 关系型数据库
DataWorks产品使用合集之如何实现MySQL数据库的自动分区
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之当需要将数据从ODPS同步到RDS,且ODPS表是二级分区表时,如何同步所有二级分区的数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
42 7
|
3月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
88 3
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库——索引(2)-B+Tree、Hash结构,索引分类(聚集索引、二级索引)
MySQL数据库——索引(2)-B+Tree、Hash结构,索引分类(聚集索引、二级索引)
53 1
|
3月前
|
存储 缓存 关系型数据库
心得经验总结:理解MySQL——并行数据库与分区(Partion)
心得经验总结:理解MySQL——并行数据库与分区(Partion)
25 0
|
4月前
|
存储 关系型数据库 MySQL
MySQL的优化利器⭐️Multi Range Read与Covering Index是如何优化回表的?
本文以小白的视角使用通俗易懂的流程图深入浅出分析Multi Range Read与Covering Index是如何优化回表
|
4月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用合集之PolarDB MySQL标准版中带有分区功能吗
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
SQL 关系型数据库 MySQL
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
|
4月前
|
存储 关系型数据库 MySQL
Mysql 分库分区分表
Mysql 分库分区分表

热门文章

最新文章