MySQL-表分区

匿名 (未验证) 提交于 2019-12-02 22:06:11

一、表分区介绍

1.1、简单介绍

1)表分区是将一个表的数据按照一定的规则水平划分为不同的逻辑块,并分别进行物理存储,这个规则就叫做分区函数,可以有不同的分区规则

2)通过show plugins语句查看当前MySQL是否支持表分区功能

mysql> show plugins; +----------------------------+----------+--------------------+---------+---------+ | Name                       | Status   | Type               | Library | License | +----------------------------+----------+--------------------+---------+---------+ | binlog                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     | | mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | GPL     | | sha256_password            | ACTIVE   | AUTHENTICATION     | NULL    | GPL     | | PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     | | MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     | | MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     | | InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     | | INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_TEMP_TABLE_INFO     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | INNODB_SYS_VIRTUAL         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     | | CSV                        | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     | | MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     | | ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     | | partition                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |  #表分区是支持的 | BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     | | FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL    | GPL     | | ngram                      | ACTIVE   | FTPARSER           | NULL    | GPL     | +----------------------------+----------+--------------------+---------+---------+

3)MySQL5.7社区版本的表分区功能是默认开启的

1.2、创建一个表分区示例

#创建分区表 CREATE TABLE employees (   id INT NOT NULL,  fname VARCHAR(30),   lname VARCHAR(30),  hired DATE NOT NULL DEFAULT '1970-01-01',  separated DATE NOT NULL DEFAULT '9999-12-31',  job_code INT NOT NULL,  store_id INT NOT NULL )  PARTITION BY RANGE (store_id)  #根据store_id范围分区  ( PARTITION p0 VALUES LESS THAN (6), PARTITION p1 VALUES LESS THAN (11), PARTITION p2 VALUES LESS THAN (16), PARTITION p3 VALUES LESS THAN (21) );  #查看表分区结构 mysql> show create table employees\G *************************** 1. row ***************************        Table: employees Create Table: CREATE TABLE `employees` (   `id` int(11) NOT NULL,   `fname` varchar(30) DEFAULT NULL,   `lname` varchar(30) DEFAULT NULL,   `hired` date NOT NULL DEFAULT '1970-01-01',   `separated` date NOT NULL DEFAULT '9999-12-31',   `job_code` int(11) NOT NULL,   `store_id` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 /*!50100 PARTITION BY RANGE (store_id) (PARTITION p0 VALUES LESS THAN (6) ENGINE = InnoDB,  PARTITION p1 VALUES LESS THAN (11) ENGINE = InnoDB,  PARTITION p2 VALUES LESS THAN (16) ENGINE = InnoDB,  PARTITION p3 VALUES LESS THAN (21) ENGINE = InnoDB) */  #插入数据测试 mysql> insert into employees values(1,'a','a',now(),now(),1,1),(2,'b','b',now(),now(),1,6);  #查看 mysql> select * from employees; +----+-------+-------+------------+------------+----------+----------+ | id | fname | lname | hired      | separated  | job_code | store_id | +----+-------+-------+------------+------------+----------+----------+ |  1 | a     | a     | 2019-10-10 | 2019-10-10 |        1 |        1 | |  2 | b     | b     | 2019-10-10 | 2019-10-10 |        1 |        6 | +----+-------+-------+------------+------------+----------+----------+  mysql> select * from employees partition (p0); #落在第一个分区上store_id<6 +----+-------+-------+------------+------------+----------+----------+ | id | fname | lname | hired      | separated  | job_code | store_id | +----+-------+-------+------------+------------+----------+----------+ |  1 | a     | a     | 2019-10-10 | 2019-10-10 |        1 |        1 | +----+-------+-------+------------+------------+----------+----------+  mysql> select * from employees partition (p1); +----+-------+-------+------------+------------+----------+----------+ | id | fname | lname | hired      | separated  | job_code | store_id | +----+-------+-------+------------+------------+----------+----------+ |  2 | b     | b     | 2019-10-10 | 2019-10-10 |        1 |        6 | +----+-------+-------+------------+------------+----------+----------+
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!