从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 |
+
------------+----------------+------------+
6
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 |
+
------------+----------------+------------+
6
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));
设置微秒,用于分区使用,分区列需要使用存在的主键或者唯一索引
|
设置好了之后,就可以将时间设置为唯一索引了,这样就可以在主键存在的情况下面使用时间作为分区列了。