天天看点

mysql 分区之RANGE && HASH

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

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

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

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

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

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

1

<code>CREATE  TABLE t1  ( </code><code>id</code> <code>INT, </code><code>date</code> <code>DATETIME DEFAULT CURRENT_TIMESTAMP) ENGINE=Innodb;</code>

插入一些测试数据:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>t1;</code>

<code>+</code><code>------+---------------------+</code>

<code>| id   | </code><code>date</code>                <code>|</code>

<code>|    1 | 2013-05-23 12:59:39 |</code>

<code>|    2 | 2013-05-23 12:59:43 |</code>

<code>|    3 | 2013-05-23 12:59:44 |</code>

<code>|    4 | 2013-07-04 19:35:45 |</code>

<code>|    5 | 2014-04-04 19:35:45 |</code>

<code>|    6 | 2014-05-04 19:35:45 |</code>

<code>|    7 | 2015-05-04 19:35:45 |</code>

<code>|    8 | 2015-05-05 19:35:45 |</code>

<code>|    9 | 2017-05-05 19:35:45 |</code>

<code>|   10 | 2018-05-05 19:35:45 |</code>

<code>10 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

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

<code>mysql&gt; EXPLAIN </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>t1;</code>

<code>+</code><code>----+-------------+-------+------+---------------+------+---------+------+------+-------+</code>

<code>| id | select_type | </code><code>table</code> <code>| type | possible_keys | </code><code>key</code>  <code>| key_len | ref  | </code><code>rows</code> <code>| Extra |</code>

<code>|  1 | SIMPLE      | t1    | </code><code>ALL</code>  <code>| </code><code>NULL</code>          <code>| </code><code>NULL</code> <code>| </code><code>NULL</code>    <code>| </code><code>NULL</code> <code>|   10 | </code><code>NULL</code>  <code>|</code>

<code>1 row </code><code>in</code> <code>set</code> <code>(0.00 sec)</code>

<code>mysql&gt; EXPLAIN </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>t1 </code><code>WHERE</code> <code>date</code> <code>&gt;= </code><code>'2014-03-05 19:00:12'</code>

<code>    </code><code>-&gt; </code><code>AND</code> <code>date</code> <code>&lt;= </code><code>'2016-03-05 18:45:12'</code><code>;</code>

<code>+</code><code>----+-------------+-------+------+---------------+------+---------+------+------+-------------+</code>

<code>| id | select_type | </code><code>table</code> <code>| type | possible_keys | </code><code>key</code>  <code>| key_len | ref  | </code><code>rows</code> <code>| Extra       |</code>

<code>|  1 | SIMPLE      | t1    | </code><code>ALL</code>  <code>| </code><code>NULL</code>          <code>| </code><code>NULL</code> <code>| </code><code>NULL</code>    <code>| </code><code>NULL</code> <code>|   10 | Using </code><code>where</code> <code>|</code>

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

<code>mysql&gt; </code><code>CREATE</code>  <code>TABLE</code> <code>t2  ( id </code><code>INT</code><code>, </code><code>date</code> <code>DATETIME </code><code>DEFAULT</code> <code>CURRENT_TIMESTAMP</code><code>) ENGINE=Innodb</code>

<code>    </code><code>-&gt;     PARTITION </code><code>BY</code> <code>RANGE (</code><code>YEAR</code><code>(</code><code>date</code><code>)) (</code>

<code>    </code><code>-&gt;     PARTITION p2013 </code><code>VALUES</code> <code>LESS THAN(2014),</code>

<code>    </code><code>-&gt;     PARTITION p2014 </code><code>VALUES</code> <code>LESS THAN(2015),</code>

<code>    </code><code>-&gt;     PARTITION p2015 </code><code>VALUES</code> <code>LESS THAN(2016),</code>

<code>    </code><code>-&gt;     PARTITION p2016 </code><code>VALUES</code> <code>LESS THAN(2017),</code>

<code>    </code><code>-&gt;     PARTITION p2017 </code><code>VALUES</code> <code>LESS THAN(2018),</code>

<code>    </code><code>-&gt;     PARTITION p2099 </code><code>VALUES</code> <code>LESS THAN MAXVALUE</code>

<code>    </code><code>-&gt; ) ;</code>

<code>Query OK, 0 </code><code>rows</code> <code>affected (2.47 sec)</code>

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

17

18

19

20

21

22

23

24

<code>mysql&gt; </code><code>SELECT</code> <code>table_name,partition_name,table_rows </code><code>FROM</code> <code>information_schema.PARTITIONS  </code><code>WHERE</code>  <code>table_schema=</code><code>database</code><code>() </code><code>AND</code> <code>table_name=</code><code>'t2'</code><code>;</code>

<code>+</code><code>------------+----------------+------------+</code>

<code>| table_name | partition_name | table_rows |</code>

<code>| t2         | p2013          |          0 |</code>

<code>| t2         | p2014          |          0 |</code>

<code>| t2         | p2015          |          0 |</code>

<code>| t2         | p2016          |          0 |</code>

<code>| t2         | p2017          |          0 |</code>

<code>| t2         | p2099          |          0 |</code>

<code>6 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

<code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>t2;</code>

<code>Empty </code><code>set</code> <code>(0.00 sec)</code>

<code>mysql&gt; EXPLAIN </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>t2;</code>

<code>|  1 | SIMPLE      | t2    | </code><code>ALL</code>  <code>| </code><code>NULL</code>          <code>| </code><code>NULL</code> <code>| </code><code>NULL</code>    <code>| </code><code>NULL</code> <code>|    6 | </code><code>NULL</code>  <code>|</code>

<code>mysql&gt; </code><code>INSERT</code> <code>INTO</code> <code>t2 </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>t1;</code>

<code>Query OK, 10 </code><code>rows</code> <code>affected (0.36 sec)</code>

<code>Records: 10  Duplicates: 0  Warnings: 0</code>

再次查看数据分部状态:

25

26

27

28

<code>mysql&gt; </code><code>SELECT</code> <code>* </code><code>FROM</code>  <code>t2;</code>

<code>| t2         | p2013          |          4 |</code>

<code>| t2         | p2014          |          2 |</code>

<code>| t2         | p2015          |          2 |</code>

<code>| t2         | p2017          |          1 |</code>

<code>| t2         | p2099          |          1 |</code>

   查看全表扫描行数情况:

<code>mysql&gt; EXPLAIN </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>t2\G</code>

<code>*************************** 1. row ***************************</code>

<code>           </code><code>id: 1</code>

<code>  </code><code>select_type: SIMPLE</code>

<code>        </code><code>table</code><code>: t2</code>

<code>         </code><code>type: </code><code>ALL</code>

<code>possible_keys: </code><code>NULL</code>

<code>          </code><code>key</code><code>: </code><code>NULL</code>

<code>      </code><code>key_len: </code><code>NULL</code>

<code>          </code><code>ref: </code><code>NULL</code>

<code>         </code><code>rows</code><code>: 11</code>

<code>        </code><code>Extra: </code><code>NULL</code>

进行where子句过滤后:

<code>mysql&gt; EXPLAIN PARTITIONS </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>t2 </code><code>WHERE</code> <code>date</code> <code>&gt;= </code><code>'2014-03-05 19:00:12'</code> <code>AND</code> <code>date</code> <code>&lt;= </code><code>'2016-03-05 18:45:12'</code><code>;</code>

<code>+</code><code>----+-------------+-------+-------------------+------+---------------+------+---------+------+------+-------------+</code>

<code>| id | select_type | </code><code>table</code> <code>| partitions        | type | possible_keys | </code><code>key</code>  <code>| key_len | ref  | </code><code>rows</code> <code>| Extra       |</code>

<code>|  1 | SIMPLE      | t2    | p2014,p2015,p2016 | </code><code>ALL</code>  <code>| </code><code>NULL</code>          <code>| </code><code>NULL</code> <code>| </code><code>NULL</code>    <code>| </code><code>NULL</code> <code>|    5 | Using </code><code>where</code> <code>|</code>

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

HASH 分区

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

<code>mysql&gt; </code><code>CREATE</code> <code>TABLE</code> <code>t3 (id </code><code>INT</code><code>,</code><code>date</code> <code>DATETIME </code><code>DEFAULT</code> <code>CURRENT_TIMESTAMP</code><code>) PARTITION </code><code>BY</code> <code>HASH(</code><code>MONTH</code><code>(</code><code>date</code><code>)) PARTITIONS  12;</code>

<code>Query OK, 0 </code><code>rows</code> <code>affected (4.51 sec)</code>

<code>mysql&gt; </code><code>SELECT</code> <code>table_name,partition_name,table_rows </code><code>FROM</code> <code>information_schema.PARTITIONS  </code><code>WHERE</code>  <code>table_schema=</code><code>database</code><code>() </code><code>AND</code> <code>table_name=</code><code>'t3'</code><code>;</code>

<code>| t3         | p0             |          0 |</code>

<code>| t3         | p1             |          0 |</code>

<code>| t3         | p2             |          0 |</code>

<code>| t3         | p3             |          0 |</code>

<code>| t3         | p4             |          0 |</code>

<code>| t3         | p5             |          0 |</code>

<code>| t3         | p6             |          0 |</code>

<code>| t3         | p7             |          0 |</code>

<code>| t3         | p8             |          0 |</code>

<code>| t3         | p9             |          0 |</code>

<code>| t3         | p10            |          0 |</code>

<code>| t3         | p11            |          0 |</code>

<code>12 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

<code>mysql&gt; INSERT INTO t3 SELECT * FROM t2;</code>

<code>Query OK, 10 rows affected (0.24 sec)</code>

<code>mysql&gt; SELECT table_name,partition_name,table_rows FROM information_schema.PARTITIONS  WHERE  table_schema=database() AND table_name=</code><code>'t3'</code><code>;</code>

<code>+------------+----------------+------------+</code>

<code>| t3         | p4             |          1 |</code>

<code>| t3         | p5             |          8 |</code>

<code>| t3         | p7             |          1 |</code>

<code>12 rows </code><code>in</code> <code>set</code> <code>(0.01 sec)</code>

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

<code>mysql&gt; </code><code>SELECT</code> <code>MOD(</code><code>MONTH</code><code>(</code><code>'2013-07-04 19:35:45'</code><code>),12);</code>

<code>+</code><code>--------------------------------------+</code>

<code>| MOD(</code><code>MONTH</code><code>(</code><code>'2013-07-04 19:35:45'</code><code>),12) |</code>

<code>|                                    7 |</code>

RANGE &amp;&amp; HASH 创建子分区

<code>mysql&gt; CREATE TABLE t4(</code><code>id</code> <code>INT ,</code><code>date</code>  <code>DATETIME  DEFAULT CURRENT_TIMESTAMP)</code>

<code>    </code><code>-&gt; PARTITION BY RANGE(YEAR(</code><code>date</code><code>))</code>

<code>    </code><code>-&gt; SUBPARTITION BY HASH(MONTH(</code><code>date</code><code>))</code>

<code>    </code><code>-&gt; SUBPARTITIONS 12 (</code>

<code>    </code><code>-&gt; PARTITION p2013 VALUES LESS THAN (2014),</code>

<code>    </code><code>-&gt; PARTITION p2014 VALUES LESS THAN (2015),</code>

<code>    </code><code>-&gt; PARTITION p2015 VALUES LESS THAN (2016),</code>

<code>    </code><code>-&gt; PARTITION p2016 VALUES LESS THAN (2017),</code>

<code>    </code><code>-&gt; PARTITION p2017 VALUES LESS THAN (2018),</code>

<code>    </code><code>-&gt; PARTITION p2099 VALUES LESS THAN  MAXVALUE);</code>

<code>Query OK, 0 rows affected (26.10 sec)</code>

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

<code>mysql&gt; </code><code>SELECT</code> <code>table_name,partition_name,table_rows </code><code>FROM</code> <code>information_schema.PARTITIONS  </code><code>WHERE</code>  <code>table_schema=</code><code>database</code><code>() </code><code>AND</code> <code>table_name=</code><code>'t4'</code><code>;</code>

<code>| t4         | p2013          |          0 |</code>

<code>| t4         | p2014          |          0 |</code>

<code>| t4         | p2015          |          0 |</code>

<code>| t4         | p2016          |          0 |</code>

<code>| t4         | p2017          |          0 |</code>

<code>| t4         | p2099          |          0 |</code>

<code>72 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.02 sec)</code>

<code>[root@server ~]</code><code># ls -l /data/test/t4*</code>

<code>-rw-rw----. 1 mysql mysql  8586 May 23 13:36 </code><code>/data/test/t4</code><code>.frm</code>

<code>-rw-rw----. 1 mysql mysql  1396 May 23 13:36 </code><code>/data/test/t4</code><code>.par</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp0.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp10.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp11.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp1.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp2.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp3.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp4.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp5.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp6.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp7.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp8.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2013#SP#p2013sp9.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp0.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp10.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp11.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp1.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp2.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp3.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp4.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp5.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp6.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp7.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp8.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2014#SP#p2014sp9.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp0.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp10.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp11.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp1.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp2.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp3.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp4.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp5.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp6.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp7.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp8.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2015#SP#p2015sp9.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp0.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp10.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp11.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp1.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp2.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp3.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp4.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp5.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp6.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp7.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp8.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2016#SP#p2016sp9.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp0.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp10.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp11.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp1.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp2.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp3.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp4.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp5.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp6.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp7.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp8.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2017#SP#p2017sp9.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp0.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp10.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp11.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp1.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp2.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp3.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp4.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp5.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp6.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp7.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp8.ibd</code>

<code>-rw-rw----. 1 mysql mysql 98304 May 23 13:36 </code><code>/data/test/t4</code><code>#P#p2099#SP#p2099sp9.ibd</code>

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

79

80

81

<code>mysql&gt; </code><code>INSERT</code> <code>INTO</code>  <code>t4  </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>t3;</code>

<code>Query OK, 10 </code><code>rows</code> <code>affected (0.33 sec)</code>

<code>| t4         | p2013          |          3 |</code>

<code>| t4         | p2013          |          1 |</code>

<code>| t4         | p2014          |          1 |</code>

<code>| t4         | p2015          |          2 |</code>

<code>| t4         | p2017          |          1 |</code>

<code>| t4         | p2099          |          1 |</code>

<code>72 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

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

<code>CREATE TABLE  t15 (</code><code>id</code> <code>INT(10),</code><code>date</code> <code>datetime(6) DEFAULT CURRENT_TIMESTAMP(6));</code>

<code>设置微秒,用于分区使用,分区列需要使用存在的主键或者唯一索引</code>

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

本文转自 暗黑魔君 51CTO博客,原文链接:http://blog.51cto.com/clovemfong/1208444,如需转载请自行联系原作者

继续阅读