从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()函数,所以在设计表的时候需要考虑到这点:
CREATE TABLE t1 ( id INT, date DATETIME DEFAULT CURRENT_TIMESTAMP) ENGINE=Innodb;
插入一些测试数据:
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)
查看查询语句执行计划:发现进行了全表扫描
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,并根据年份进行表分区
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表的数据:
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
再次查看数据分部状态:
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)
查看全表扫描行数情况:
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子句过滤后:
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个分区
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)
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)
mysql> INSERT INTO t3 SELECT * FROM t2; Query OK, 10 rows affected (0.24 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='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的那行
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 创建子分区
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)
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)
[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
以上命令用于查看子分区所有信, 下面的命令用于插入值,查看数据分布状况。
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,很有可能在同一个时间插入新记录,此时可能需要用到微秒:
CREATE TABLE t15 (id INT(10),date datetime(6) DEFAULT CURRENT_TIMESTAMP(6)); 设置微秒,用于分区使用,分区列需要使用存在的主键或者唯一索引
设置好了之后,就可以将时间设置为唯一索引了,这样就可以在主键存在的情况下面使用时间作为分区列了。
顺便说一下:51CTO的编辑器能不能改进,优化优化,体验很不好,贴个代码,然后输入文字很容易出现不爽的问题!