zoukankan      html  css  js  c++  java
  • MySQL 表分区(六)

    •  子表分区,是在表分区的基础上再创建表分区的概念,每个表分区下的子表分区个数必须一致

    mysql> CREATE TABLE ts (id INT, purchased DATE)
        -> PARTITION BY RANGE( YEAR(purchased) )
        -> SUBPARTITION BY HASH( TO_DAYS(purchased) )
        -> SUBPARTITIONS 2
        -> ( PARTITION p0 VALUES LESS THAN (1990),
        -> PARTITION p1 VALUES LESS THAN (2000),
        -> PARTITION p2 VALUES LESS THAN MAXVALUE );
    Query OK, 0 rows affected (0.48 sec)
    
    mysql> desc information_schema.partitions;
    +-------------------------------+---------------------+------+-----+---------+-------+
    | Field                         | Type                | Null | Key | Default | Extra |
    +-------------------------------+---------------------+------+-----+---------+-------+
    | TABLE_CATALOG                 | varchar(64)         | NO   |     | NULL    |       |
    | TABLE_SCHEMA                  | varchar(64)         | NO   |     | NULL    |       |
    | TABLE_NAME                    | varchar(64)         | NO   |     | NULL    |       |
    | PARTITION_NAME                | varchar(64)         | YES  |     | NULL    |       |
    | SUBPARTITION_NAME             | varchar(64)         | YES  |     | NULL    |       |
    | PARTITION_ORDINAL_POSITION    | int(6) unsigned     | YES  |     | NULL    |       |
    | SUBPARTITION_ORDINAL_POSITION | int(6) unsigned     | YES  |     | NULL    |       |
    | PARTITION_METHOD              | varchar(13)         | YES  |     | NULL    |       |
    | SUBPARTITION_METHOD           | varchar(13)         | YES  |     | NULL    |       |
    | PARTITION_EXPRESSION          | varchar(2048)       | YES  |     | NULL    |       |
    | SUBPARTITION_EXPRESSION       | varchar(2048)       | YES  |     | NULL    |       |
    | PARTITION_DESCRIPTION         | text                | YES  |     | NULL    |       |
    | TABLE_ROWS                    | bigint(21) unsigned | YES  |     | NULL    |       |
    | AVG_ROW_LENGTH                | bigint(21) unsigned | YES  |     | NULL    |       |
    | DATA_LENGTH                   | bigint(21) unsigned | YES  |     | NULL    |       |
    | MAX_DATA_LENGTH               | bigint(21) unsigned | YES  |     | NULL    |       |
    | INDEX_LENGTH                  | bigint(21) unsigned | YES  |     | NULL    |       |
    | DATA_FREE                     | bigint(21) unsigned | YES  |     | NULL    |       |
    | CREATE_TIME                   | timestamp           | NO   |     | NULL    |       |
    | UPDATE_TIME                   | datetime            | YES  |     | NULL    |       |
    | CHECK_TIME                    | datetime            | YES  |     | NULL    |       |
    | CHECKSUM                      | bigint(21)          | YES  |     | NULL    |       |
    | PARTITION_COMMENT             | text                | NO   |     | NULL    |       |
    | NODEGROUP                     | varchar(256)        | YES  |     | NULL    |       |
    | TABLESPACE_NAME               | varchar(259)        | YES  |     | NULL    |       |
    +-------------------------------+---------------------+------+-----+---------+-------+
    25 rows in set (0.01 sec)
    
    mysql> select partition_name,subpartition_name from information_schema.partitions where table_name='ts';
    +----------------+-------------------+
    | PARTITION_NAME | SUBPARTITION_NAME |
    +----------------+-------------------+
    | p0             | p0sp0             |
    | p0             | p0sp1             |
    | p1             | p1sp0             |
    | p1             | p1sp1             |
    | p2             | p2sp0             |
    | p2             | p2sp1             |
    +----------------+-------------------+
    6 rows in set (0.00 sec)
    
    mysql> select to_days(now());
    +----------------+
    | to_days(now()) |
    +----------------+
    |         737917 |
    +----------------+
    1 row in set (0.00 sec)
    
    mysql> desc ts;
    +-----------+---------+------+-----+---------+-------+
    | Field     | Type    | Null | Key | Default | Extra |
    +-----------+---------+------+-----+---------+-------+
    | id        | int(11) | YES  |     | NULL    |       |
    | purchased | date    | YES  |     | NULL    |       |
    +-----------+---------+------+-----+---------+-------+
    2 rows in set (0.00 sec)
    
    mysql> insert into ts values(1,now());
    Query OK, 1 row affected, 1 warning (0.10 sec)
    
    mysql> insert into ts values(1,'1980-01-01');
    Query OK, 1 row affected (0.09 sec)
    
    mysql> select * from ts partition(p1);
    Empty set (0.00 sec)
    
    mysql> select * from ts partition(p2);
    +------+------------+
    | id   | purchased  |
    +------+------------+
    |    1 | 2020-05-07 |
    +------+------------+
    1 row in set (0.00 sec)
    
    mysql> select * from ts partition(p0sp0);
    +------+------------+
    | id   | purchased  |
    +------+------------+
    |    1 | 1980-01-01 |
    +------+------------+
    1 row in set (0.00 sec)
    
    mysql> select * from ts partition(p0sp1);
    Empty set (0.00 sec)
    
    mysql> select purchased,to_days(purchased) from ts;
    +------------+--------------------+
    | purchased  | to_days(purchased) |
    +------------+--------------------+
    | 1980-01-01 |             723180 |
    | 2020-05-07 |             737917 |
    +------------+--------------------+
    2 rows in set (0.00 sec)
    
    mysql> select * from ts partition(p2sp0);
    Empty set (0.00 sec)
    
    mysql> select * from ts partition(p2sp0);
    Empty set (0.00 sec)
    
    mysql> select * from ts partition(p2);
    +------+------------+
    | id   | purchased  |
    +------+------------+
    |    1 | 2020-05-07 |
    +------+------------+
    1 row in set (0.00 sec)
    
    mysql> explain select * from ts where purchased='2020-05-07';
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
    | id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
    |  1 | SIMPLE      | ts    | p2_p2sp1   | ALL  | NULL          | NULL | NULL    | NULL |    1 |   100.00 | Using where |
    +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
    1 row in set, 1 warning (0.00 sec)
    mysql> CREATE TABLE t1 ( c1 INT, c2 VARCHAR(20) )
        -> PARTITION BY RANGE(c1)
        -> ( PARTITION p0 VALUES LESS THAN (0),
        -> PARTITION p1 VALUES LESS THAN (10),
        -> PARTITION p2 VALUES LESS THAN MAXVALUE );
    Query OK, 0 rows affected (0.18 sec)
    
    mysql> select * from t1;
    Empty set (0.01 sec)
    
    mysql> insert into ti values(-1,'a');
    ERROR 1146 (42S02): Table 'course.ti' doesn't exist
    mysql> insert into t1 values(-1,'a');
    Query OK, 1 row affected (0.05 sec)
    
    mysql> select * from t1 partition(p0);
    +------+------+
    | c1   | c2   |
    +------+------+
    |   -1 | a    |
    +------+------+
    1 row in set (0.01 sec)
    
    mysql> insert into t1 values(null,'b');
    Query OK, 1 row affected (0.04 sec)
    
    mysql> select * from t1;
    +------+------+
    | c1   | c2   |
    +------+------+
    |   -1 | a    |
    | NULL | b    |
    +------+------+
    2 rows in set (0.00 sec)
    
    mysql> select * from t1 partition(p0);
    +------+------+
    | c1   | c2   |
    +------+------+
    |   -1 | a    |
    | NULL | b    |
    +------+------+
    2 rows in set (0.00 sec)
    
    mysql> select * from t1 partition(p2);
    Empty set (0.01 sec)
    mysql> CREATE TABLE ts1 (c1 INT, c2 VARCHAR(20))
        -> PARTITION BY LIST(c1)
        -> (PARTITION p0 VALUES IN (0, 3, 6), 
        -> PARTITION p1 VALUES IN (1, 4, 7), 
        -> PARTITION p2 VALUES IN (2, 5, 8));
    Query OK, 0 rows affected (0.26 sec)
    
    mysql> insert into ts1 values(null,'a');
    ERROR 1526 (HY000): Table has no partition for value NULL
    mysql> insert into ts1 values(10,'a');
    ERROR 1526 (HY000): Table has no partition for value 10
    mysql> 
    mysql> 
    mysql> drop table ts1;
    Query OK, 0 rows affected (0.09 sec)
    
    mysql> CREATE TABLE ts1 (c1 INT, c2 VARCHAR(20))
        -> PARTITION BY LIST(c1)
        -> (PARTITION p0 VALUES IN (0, 3, 6), 
        -> PARTITION p1 VALUES IN (1, 4, 7,null), 
        -> PARTITION p2 VALUES IN (2, 5, 8));
    Query OK, 0 rows affected (0.13 sec)
    
    mysql> insert into ts1 values(null,'a');
    Query OK, 1 row affected (0.07 sec)
    
    mysql> select * from ts1 partition(p1);
    +------+------+
    | c1   | c2   |
    +------+------+
    | NULL | a    |
    +------+------+
    1 row in set (0.00 sec)
    mysql> CREATE TABLE th ( c1 INT, c2 VARCHAR(20) )
        -> PARTITION BY HASH(c1)
        -> PARTITIONS 2;
    Query OK, 0 rows affected (0.18 sec)
    
    mysql> insert into th values(null,'a');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from th;
    +------+------+
    | c1   | c2   |
    +------+------+
    | NULL | a    |
    +------+------+
    1 row in set (0.00 sec)
    
    mysql> select * from th partition(p1);
    Empty set (0.00 sec)
  • 相关阅读:
    九个合理的个人所得税避税方案
    百度搜索技巧
    jsoup方法string转document
    java正则
    多线程之join方法
    java获取当前日期时间代码总结
    Error与Exception的区别,Java常见异常Execption总结
    Google Chrome调试js入门
    Resource temporarily unavailable用户的连接数设置的太小
    所有javax包
  • 原文地址:https://www.cnblogs.com/dinghailong128/p/12845839.html
Copyright © 2011-2022 走看看