亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

Mysql分區表的管理與維護

2024-07-24 13:10:18
字體:
來源:轉載
供稿:網友

改變一個表的分區方案只需使用alter table 加 partition_options 子句就可以了。和創建分區表時的create table語句很像。

創建表

CREATE TABLE trb3 (id INT, name VARCHAR(50), purchased DATE)PARTITION BY RANGE( YEAR(purchased) ) (PARTITION p0 VALUES LESS THAN (1990),PARTITION p1 VALUES LESS THAN (1995),PARTITION p2 VALUES LESS THAN (2000),PARTITION p3 VALUES LESS THAN (2005));

創建插入數據存儲過程

delimiter $$drop procedure if exists pr_trb3$$create procedure pr_trb3(in begindate date,in enddate date,in tabname varchar(40))beginwhile begindate<enddate 1="" begindate="date_add(begindate,interval" delimiter="" do="" drop="" end="" execute="" from="" insert="" pre="" prepare="" s="concat_ws('" set="" stmt=""><p>調用存儲過程插入數據</p><pre class="brush:sql;">call pr_trb3('1985-01-01','2004-12-31','trb3');</pre><p>查看數據分布</p><pre class="brush:sql;">select partition_name part, partition_expression expr, partition_description descr, table_rows from information_schema.partitions where table_schema = schema() and table_name='trb3';+------+------------------+-------+------------+| part | expr | descr | table_rows |+------+------------------+-------+------------+| p0 | YEAR(purchased) | 1990 | 1826 || p1 | YEAR(purchased) | 1995 | 1826 || p2 | YEAR(purchased) | 2000 | 1826 || p3 | YEAR(purchased) | 2005 | 1826 |+------+------------------+-------+------------+4 rows in set (0.00 sec)</pre><p>改變分區方案</p><pre class="brush:sql;">mysql> ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 4;Query OK, 7304 rows affected (0.07 sec)Records: 7304 Duplicates: 0 Warnings: 0</pre><p>查看數據</p><pre class="brush:sql;">select partition_name part, partition_expression expr, partition_description descr, table_rows from information_schema.partitions where table_schema = schema() and table_name='trb3';+------+------+-------+------------+| part | expr | descr | table_rows |+------+------+-------+------------+| p0 | `id` | NULL | 7472 || p1 | `id` | NULL | 0 || p2 | `id` | NULL | 0 || p3 | `id` | NULL | 0 |+------+------+-------+------------+4 rows in set (0.00 sec)mysql> select 1826*4;+--------+| 1826*4 |+--------+| 7304 |+--------+1 row in set (0.00 sec)</pre><p>count(*)行數一致,說明數據沒出問題,但是information_schema.partitions查出來的不對<del>,這就不知道為什么了</del></p><blockquote><p>For partitioned InnoDB tables, the row count given in the TABLE_ROWS column of the INFORMATION_SCHEMA.PARTITIONS table is only an estimated value used in SQL optimization, and is not always exact.</p></blockquote><pre class="brush:sql;">mysql> select count(*) from trb3;+----------+| count(*) |+----------+| 7304 |+----------+但是count(*)還是7304,什么鬼</pre><p>再次改變分區方案</p><pre class="brush:sql;">ALTER TABLE trb3 PARTITION BY RANGE( YEAR(purchased) ) (PARTITION p0 VALUES LESS THAN (1990),PARTITION p1 VALUES LESS THAN (1995),PARTITION p2 VALUES LESS THAN (2000),PARTITION p3 VALUES LESS THAN (2005));mysql> select -> partition_name part, -> partition_expression expr, -> partition_description descr, -> table_rows -> from information_schema.partitions where -> table_schema = schema() -> and table_name='trb3';+------+------------------+-------+------------+| part | expr | descr | table_rows |+------+------------------+-------+------------+| p0 | YEAR(purchased) | 1990 | 1826 || p1 | YEAR(purchased) | 1995 | 1826 || p2 | YEAR(purchased) | 2000 | 0 || p3 | YEAR(purchased) | 2005 | 0 |+------+------------------+-------+------------+4 rows in set (0.00 sec)</pre><p><del>丟數據了。。</del><br>更正,實際沒丟,這個information_shcema.partitions表有延遲,過一會再查就好了</p><pre class="brush:sql;">mysql> select -> partition_name part, -> partition_expression expr, -> partition_description descr, -> table_rows -> from information_schema.partitions where -> table_schema = schema() -> and table_name='trb3';+------+------------------+-------+------------+| part | expr | descr | table_rows |+------+------------------+-------+------------+| p0 | YEAR(purchased) | 1990 | 1826 || p1 | YEAR(purchased) | 1995 | 1826 || p2 | YEAR(purchased) | 2000 | 1826 || p3 | YEAR(purchased) | 2005 | 1826 |+------+------------------+-------+------------+4 rows in set (0.00 sec)</pre><p>官方文檔說:<br>This has the same effect on the structure of the table as dropping the table and re-creating it using CREATE TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;<br>就是說ALTER TABLE trb3 PARTITION BY與 drop table然后重新create table trb3 partition by key(id) partitions 2一樣呢。</p><h3 id="改存儲引擎和普通表沒啥區別">改存儲引擎,和普通表沒啥區別</h3><pre class="brush:sql;">mysql> drop table trb3;Query OK, 0 rows affected (0.01 sec)mysql> CREATE TABLE trb3 (id INT, name VARCHAR(50), purchased DATE)-> PARTITION BY RANGE( YEAR(purchased) ) (-> PARTITION p0 VALUES LESS THAN (1990),-> PARTITION p1 VALUES LESS THAN (1995),-> PARTITION p2 VALUES LESS THAN (2000),-> PARTITION p3 VALUES LESS THAN (2005)-> );Query OK, 0 rows affected (0.03 sec)mysql> call pr_trb3('1985-01-01','2004-12-31','trb3');Query OK, 0 rows affected (1.69 sec)mysql> select -> partition_name part, -> partition_expression expr, -> partition_description descr, -> table_rows -> from information_schema.partitions where -> table_schema = schema() -> and table_name='trb3';+------+------------------+-------+------------+| part | expr | descr | table_rows |+------+------------------+-------+------------+| p0 | YEAR(purchased) | 1990 | 1826 || p1 | YEAR(purchased) | 1995 | 1826 || p2 | YEAR(purchased) | 2000 | 1826 || p3 | YEAR(purchased) | 2005 | 1826 |+------+------------------+-------+------------+4 rows in set (0.01 sec)mysql> alter table trb3 engine=myisam;Query OK, 7304 rows affected (0.02 sec)Records: 7304 Duplicates: 0 Warnings: 0mysql> select -> partition_name part, -> partition_expression expr, -> partition_description descr, -> table_rows -> from information_schema.partitions where -> table_schema = schema() -> and table_name='trb3';+------+------------------+-------+------------+| part | expr | descr | table_rows |+------+------------------+-------+------------+| p0 | YEAR(purchased) | 1990 | 1826 || p1 | YEAR(purchased) | 1995 | 1826 || p2 | YEAR(purchased) | 2000 | 1826 || p3 | YEAR(purchased) | 2005 | 1826 |+------+------------------+-------+------------+4 rows in set (0.01 sec)mysql> show create table trb3/G*************************** 1. row ***************************Table: trb3Create Table: CREATE TABLE `trb3` (`id` int(11) DEFAULT NULL,`name` varchar(50) DEFAULT NULL,`purchased` date DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8/*!50100 PARTITION BY RANGE ( YEAR(purchased))(PARTITION p0 VALUES LESS THAN (1990) ENGINE = MyISAM,PARTITION p1 VALUES LESS THAN (1995) ENGINE = MyISAM,PARTITION p2 VALUES LESS THAN (2000) ENGINE = MyISAM,PARTITION p3 VALUES LESS THAN (2005) ENGINE = MyISAM) */1 row in set (0.00 sec)</pre><h3 id="將表由分區表改為非分區表">將表由分區表改為非分區表</h3><pre class="brush:sql;">mysql> alter table trb3 remove partitioning;Query OK, 7304 rows affected (0.01 sec)Records: 7304 Duplicates: 0 Warnings: 0mysql> select -> partition_name part, -> partition_expression expr, -> partition_description descr, -> table_rows -> from information_schema.partitions where -> table_schema = schema() -> and table_name='trb3';+------+------+-------+------------+| part | expr | descr | table_rows |+------+------+-------+------------+| NULL | NULL | NULL | 7304 |+------+------+-------+------------+1 row in set (0.00 sec)mysql> show create table trb3/G*************************** 1. row ***************************Table: trb3Create Table: CREATE TABLE `trb3` (`id` int(11) DEFAULT NULL,`name` varchar(50) DEFAULT NULL,`purchased` date DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf81 row in set (0.00 sec)</pre><h3 id="range-list分區管理">Range List分區管理</h3><pre class="brush:sql;">mysql> drop table trb3;Query OK, 0 rows affected (0.01 sec)mysql> CREATE TABLE trb3 (id INT, name VARCHAR(50), purchased DATE)-> PARTITION BY RANGE( YEAR(purchased) ) (-> PARTITION p0 VALUES LESS THAN (1990),-> PARTITION p1 VALUES LESS THAN (1995),-> PARTITION p2 VALUES LESS THAN (2000),-> PARTITION p3 VALUES LESS THAN (2005)-> );Query OK, 0 rows affected (0.03 sec)mysql> call pr_trb3('1985-01-01','2004-12-31','trb3');Query OK, 0 rows affected (1.75 sec)mysql> select -> partition_name part, -> partition_expression expr, -> partition_description descr, -> table_rows -> from information_schema.partitions where -> table_schema = schema() -> and table_name='trb3';+------+------------------+-------+------------+| part | expr | descr | table_rows |+------+------------------+-------+------------+| p0 | YEAR(purchased) | 1990 | 1826 || p1 | YEAR(purchased) | 1995 | 1826 || p2 | YEAR(purchased) | 2000 | 1826 || p3 | YEAR(purchased) | 2005 | 1826 |+------+------------------+-------+------------+4 rows in set (0.00 sec)</pre><h4 id="增加分區">增加分區</h4><pre class="brush:sql;">mysql> alter table trb3 add partition (partition p5 values less than(2010));Query OK, 0 rows affected (0.00 sec)Records: 0 Duplicates: 0 Warnings: 0</pre><h4 id="合并分區">合并分區</h4><pre class="brush:sql;">mysql> alter table trb3 reorganize partition p3,p5 into(partition p5 values less than(2010));Query OK, 1826 rows affected (0.03 sec)Records: 1826 Duplicates: 0 Warnings: 0mysql> select -> partition_name part, -> partition_expression expr, -> partition_description descr, -> table_rows -> from information_schema.partitions where -> table_schema = schema() -> and table_name='trb3';+------+------------------+-------+------------+| part | expr | descr | table_rows |+------+------------------+-------+------------+| p0 | YEAR(purchased) | 1990 | 1826 || p1 | YEAR(purchased) | 1995 | 1826 || p2 | YEAR(purchased) | 2000 | 1826 || p5 | YEAR(purchased) | 2010 | 1826 |+------+------------------+-------+------------+4 rows in set (0.00 sec)</pre><h4 id="分裂分區">分裂分區</h4><pre class="brush:sql;">mysql> ALTER TABLE trb3 REORGANIZE PARTITION p5 INTO (-> PARTITION p3 VALUES LESS THAN (2005),-> PARTITION p4 VALUES LESS THAN (2010)-> );Query OK, 1826 rows affected (0.04 sec)Records: 1826 Duplicates: 0 Warnings: 0select partition_name part, partition_expression expr, partition_description descr, table_rows from information_schema.partitions where table_schema = schema() and table_name='trb3';+------+------------------+-------+------------+| part | expr | descr | table_rows |+------+------------------+-------+------------+| p0 | YEAR(purchased) | 1990 | 1826 || p1 | YEAR(purchased) | 1995 | 1826 || p2 | YEAR(purchased) | 2000 | 1826 || p3 | YEAR(purchased) | 2005 | 1826 || p4 | YEAR(purchased) | 2010 | 0 |+------+------------------+-------+------------+5 rows in set (0.00 sec)</pre><h3 id="hash-key分區">HASH KEY分區</h3><pre class="brush:sql;">CREATE TABLE trb3 (id INT, name VARCHAR(50), purchased DATE)PARTITION BY hash( YEAR(purchased) ) partitions 12;mysql>call pr_trb3('1985-01-01','2004-12-31','trb3');select partition_name part, partition_expression expr, partition_description descr, table_rows from information_schema.partitions where table_schema = schema() and table_name='trb3';+------+------------------+-------+------------+| part | expr | descr | table_rows |+------+------------------+-------+------------+| p0 | YEAR(purchased) | NULL | 731 || p1 | YEAR(purchased) | NULL | 365 || p2 | YEAR(purchased) | NULL | 365 || p3 | YEAR(purchased) | NULL | 365 || p4 | YEAR(purchased) | NULL | 366 || p5 | YEAR(purchased) | NULL | 730 || p6 | YEAR(purchased) | NULL | 730 || p7 | YEAR(purchased) | NULL | 730 || p8 | YEAR(purchased) | NULL | 732 || p9 | YEAR(purchased) | NULL | 730 || p10 | YEAR(purchased) | NULL | 730 || p11 | YEAR(purchased) | NULL | 730 |+------+------------------+-------+------------+12 rows in set (0.00 sec)</pre><h4 id="縮建分區從12個到8個">縮建分區從12個到8個</h4><pre class="brush:sql;">mysql> ALTER TABLE trb3 COALESCE PARTITION 4;Query OK, 7304 rows affected (0.13 sec)Records: 7304 Duplicates: 0 Warnings: 0select partition_name part, partition_expression expr, partition_description descr, table_rows from information_schema.partitions where table_schema = schema() and table_name='trb3';+------+------------------+-------+------------+| part | expr | descr | table_rows |+------+------------------+-------+------------+| p0 | YEAR(purchased) | NULL | 732 || p1 | YEAR(purchased) | NULL | 1095 || p2 | YEAR(purchased) | NULL | 1095 || p3 | YEAR(purchased) | NULL | 1095 || p4 | YEAR(purchased) | NULL | 1097 || p5 | YEAR(purchased) | NULL | 730 || p6 | YEAR(purchased) | NULL | 730 || p7 | YEAR(purchased) | NULL | 730 |+------+------------------+-------+------------+8 rows in set (0.00 sec)mysql> select count(*) from trb3;+----------+| count(*) |+----------+| 7304 |+----------+1 row in set (0.00 sec)</pre><p>沒丟數據</p><p>收縮前2004年在P0</p><pre class="brush:sql;">mysql> select mod(2004,12);+--------------+| mod(2004,12) |+--------------+| 0 |+--------------+</pre><p>收縮后2004年在P4</p><pre class="brush:sql;">mysql> select mod(2004,8);+-------------+| mod(2004,8) |+-------------+| 4 |+-------------+</pre><h3 id="exchanging-partitions-and-subpartitions-with-tables">Exchanging Partitions and Subpartitions with Tables</h3><h3 id="分區子分區交換">分區(子分區)交換</h3><pre class="brush:sql;"> ALTER TABLE pt EXCHANGE PARTITION p WITH TABLE nt</pre><p>pt是一個分區表,p是pt的分區或子分區,而nt是一個非分區表</p><h4 id="限制條件">限制條件:</h4><p>1.表nt不是分區表<br>2.表nt不是臨時表<br>3.表pt和nt結構在其他方面是相同的<br>4.表n沒有外鍵約束,也沒有其他表引用它的列為外鍵<br>5.表nt的所有行都包含在表p的分區范圍內(比如p range分區最大values less than 10,那么表nt不能有大于等于10的值)</p><h4 id="權限">權限:</h4><p>除了 ALTER, INSERT, and CREATE 權限外,你還要有DROP權限才能執行ALTER TABLE … EXCHANGE PARTITION.</p><h4 id="其他注意事項">其他注意事項:</h4><p>1.執行ALTER TABLE … EXCHANGE PARTITION 不會調用任何在nt表和p表上的觸發器<br>2.在交換表中的任何AUTO_INCREMENT列會被reset<br>3.IGNORE關鍵字在執行ALTER TABLE … EXCHANGE PARTITION時會失效</p><h4 id="完整實例語句如下">完整實例語句如下:</h4><pre class="brush:sql;">ALTER TABLE pt EXCHANGE PARTITION p WITH TABLE nt;</pre><p>在一次ALTER TABLE EXCHANGE PARTITION 中,只能有一個分區和一個非分區表被交換<br>想交換多個,就執行多次ALTER TABLE EXCHANGE PARTITION<br>任何MySQL支持的分區類型都可以進行交換</p><h4 id="交換實例">交換實例</h4><pre class="brush:sql;">CREATE TABLE e (id INT NOT NULL,fname VARCHAR(30),lname VARCHAR(30))PARTITION BY RANGE (id) (PARTITION p0 VALUES LESS THAN (50),PARTITION p1 VALUES LESS THAN (100),PARTITION p2 VALUES LESS THAN (150),PARTITION p3 VALUES LESS THAN (MAXVALUE));INSERT INTO e VALUES (1669, "Jim", "Smith"),(337, "Mary", "Jones"),(16, "Frank", "White"),(2005, "Linda", "Black");</pre><p>創建一個與e結構一樣的非分區表e2</p><pre class="brush:sql;">mysql> create table e2 like e;Query OK, 0 rows affected (0.01 sec)mysql> show create table e2/G*************************** 1. row ***************************Table: e2Create Table: CREATE TABLE `e2` (`id` int(11) NOT NULL,`fname` varchar(30) DEFAULT NULL,`lname` varchar(30) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8/*!50100 PARTITION BY RANGE (id)(PARTITION p0 VALUES LESS THAN (50) ENGINE = InnoDB,PARTITION p1 VALUES LESS THAN (100) ENGINE = InnoDB,PARTITION p2 VALUES LESS THAN (150) ENGINE = InnoDB,PARTITION p3 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */1 row in set (0.00 sec)mysql> alter table e2 remove partitioning;Query OK, 0 rows affected (0.02 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> show create table e2/G*************************** 1. row ***************************Table: e2Create Table: CREATE TABLE `e2` (`id` int(11) NOT NULL,`fname` varchar(30) DEFAULT NULL,`lname` varchar(30) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)</pre><p>查看數據在e表中的分布:</p><pre class="brush:sql;">select partition_name part, partition_expression expr, partition_description descr, table_rows from information_schema.partitions where table_schema = schema() and table_name='e'+------+------+----------+------------+| part | expr | descr | table_rows |+------+------+----------+------------+| p0 | id | 50 | 1 || p1 | id | 100 | 0 || p2 | id | 150 | 0 || p3 | id | MAXVALUE | 3 |+------+------+----------+------------+4 rows in set (0.00 sec)</pre><p>將分區p0與e2表進行交換:</p><pre class="brush:sql;">mysql> ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2;Query OK, 0 rows affected (0.01 sec)select partition_name part, partition_expression expr, partition_description descr, table_rows from information_schema.partitions where table_schema = schema() and table_name='e';+------+------+----------+------------+| part | expr | descr | table_rows |+------+------+----------+------------+| p0 | id | 50 | 0 || p1 | id | 100 | 0 || p2 | id | 150 | 0 || p3 | id | MAXVALUE | 3 |+------+------+----------+------------+4 rows in set (0.01 sec)mysql> select * from e2;+----+-------+-------+| id | fname | lname |+----+-------+-------+| 16 | Frank | White |+----+-------+-------+1 row in set (0.00 sec) </pre><p>重做實驗,這次在交換前在表e2中插入一些數據</p><pre class="brush:sql;">mysql> insert into e2 values(16,'FAN','BOSHI');Query OK, 1 row affected (0.00 sec)mysql> insert into e2 values(51,'DU','YALAN');Query OK, 1 row affected (0.00 sec)mysql> select * from e2;+----+-------+-------+| id | fname | lname |+----+-------+-------+| 16 | FAN | BOSHI || 51 | DU | YALAN |+----+-------+-------+2 rows in set (0.00 sec)mysql> ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2;ERROR 1737 (HY000): Found a row that does not match the partition</pre><p>報錯了,因為51超出了p0的范圍。<br>如之前所說,此時使用IGNORE也無濟于事</p><pre class="brush:sql;">mysql> ALTER IGNORE TABLE e EXCHANGE PARTITION p0 WITH TABLE e2;ERROR 1737 (HY000): Found a row that does not match the partition</pre><p>修改id為49,這樣就屬于p0的范圍了</p><pre class="brush:sql;">mysql> update e2 set id=49 where id=51;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2;Query OK, 0 rows affected (0.01 sec)mysql> select -> partition_name part, -> partition_expression expr, -> partition_description descr, -> table_rows -> from information_schema.partitions where -> table_schema = schema() -> and table_name='e';+------+------+----------+------------+| part | expr | descr | table_rows |+------+------+----------+------------+| p0 | id | 50 | 2 || p1 | id | 100 | 0 || p2 | id | 150 | 0 || p3 | id | MAXVALUE | 3 |+------+------+----------+------------+4 rows in set (0.00 sec)e2的數據被交換到了p0中mysql> select * from e partition(p0);+----+-------+-------+| id | fname | lname |+----+-------+-------+| 16 | FAN | BOSHI || 49 | DU | YALAN |+----+-------+-------+2 rows in set (0.00 sec)e的p0分區中的數據被交換到了e2中mysql> select * from e2;+----+-------+-------+| id | fname | lname |+----+-------+-------+| 16 | Frank | White |+----+-------+-------+1 row in set (0.01 sec)</pre><h4 id="交換subpartition">交換subpartition</h4><pre class="brush:sql;">CREATE TABLE es (id INT NOT NULL,fname VARCHAR(30),lname VARCHAR(30))PARTITION BY RANGE (id)SUBPARTITION BY KEY (lname)SUBPARTITIONS 2 (PARTITION p0 VALUES LESS THAN (50),PARTITION p1 VALUES LESS THAN (100),PARTITION p2 VALUES LESS THAN (150),PARTITION p3 VALUES LESS THAN (MAXVALUE));INSERT INTO es VALUES(1669, "Jim", "Smith"),(337, "Mary", "Jones"),(16, "Frank", "White"),(2005, "Linda", "Black");CREATE TABLE es2 LIKE es;ALTER TABLE es2 REMOVE PARTITIONING;</pre><p>盡管我們沒有顯示的指定每個子分區的名字,我們仍可以通過information_schema.partitions表獲取到子分區的名字</p><pre class="brush:sql;">select partition_name part, subpartition_name, partition_expression expr, partition_description descr, table_rows from information_schema.partitions where table_schema = schema() and table_name='es';+------+-------------------+------+----------+------------+| part | subpartition_name | expr | descr | table_rows |+------+-------------------+------+----------+------------+| p0 | p0sp0 | id | 50 | 1 || p0 | p0sp1 | id | 50 | 0 || p1 | p1sp0 | id | 100 | 0 || p1 | p1sp1 | id | 100 | 0 || p2 | p2sp0 | id | 150 | 0 || p2 | p2sp1 | id | 150 | 0 || p3 | p3sp0 | id | MAXVALUE | 3 || p3 | p3sp1 | id | MAXVALUE | 0 |+------+-------------------+------+----------+------------+</pre><p>接下來,開始將p3sp0和es進行交換</p><pre class="brush:sql;">mysql> select * from es partition(p3sp0);+------+-------+-------+| id | fname | lname |+------+-------+-------+| 1669 | Jim | Smith || 337 | Mary | Jones || 2005 | Linda | Black |+------+-------+-------+3 rows in set (0.00 sec)mysql> ALTER TABLE es EXCHANGE PARTITION p3sp0 WITH TABLE es2;Query OK, 0 rows affected (0.00 sec)mysql> select * from es partition(p3sp0);Empty set (0.00 sec)mysql> select * from es2;+------+-------+-------+| id | fname | lname |+------+-------+-------+| 1669 | Jim | Smith || 337 | Mary | Jones || 2005 | Linda | Black |+------+-------+-------+3 rows in set (0.00 sec)</pre><p>如果一個分區表有子分區,那么你只能以子分區為粒度進行交換,而不能直接交換子分區的父分區</p><pre class="brush:sql;">mysql> ALTER TABLE es EXCHANGE PARTITION p3 WITH TABLE es2;ERROR 1704 (HY000): Subpartitioned table, use subpartition instead of partition</pre><p>EXCHANGE PARTITION有著嚴格的要求<br>兩個將要交換的表的 列名,列的創建順序,列的數量,以及索引都要嚴格一致。當然存儲引擎也要一致</p><pre class="brush:sql;">mysql> desc es2;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id | int(11) | NO | | NULL | || fname | varchar(30) | YES | | NULL | || lname | varchar(30) | YES | | NULL | |+-------+-------------+------+-----+---------+-------+3 rows in set (0.00 sec)mysql> create index id_name on es2(id,fname);Query OK, 0 rows affected (0.01 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> ALTER TABLE es EXCHANGE PARTITION p3sp0 WITH TABLE es2;ERROR 1736 (HY000): Tables have different definitions</pre><p>改變es2的存儲引擎</p><pre class="brush:sql;">mysql> drop index id_name on es2;Query OK, 0 rows affected (0.00 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> alter table es2 engine=myisam;Query OK, 0 rows affected (0.01 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> ALTER TABLE es EXCHANGE PARTITION p3sp0 WITH TABLE es2;ERROR 1497 (HY000): The mix of handlers in the partitions is not allowed in this version of MySQL</pre><h3 id="分區表的維護">分區表的維護</h3><p>CHECK TABLE, OPTIMIZE TABLE, ANALYZE TABLE, and REPAIR TABLE可以被用于維護分區表</p><p>Rebuilding partitions.相當于將分區中的數據drop掉再插入回來,對于避免磁盤碎片很有效<br>Example:</p><pre class="brush:sql;">ALTER TABLE t1 REBUILD PARTITION p0, p1;</pre><p>Optimizing partitions.如果你的表增加刪除了大量數據,或者進行了大量的邊長列的更新操作( VARCHAR, BLOB, or TEXT columns)。那么optimize partition將回收未使用的空間,并整理分區數據文件。<br>Example:</p><pre class="brush:sql;">ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;</pre><p>運行OPTIMIZE PARTITION 相當于做了 CHECK PARTITION, ANALYZE PARTITION, and REPAIR PARTITION</p><blockquote><p>Some MySQL storage engines, including InnoDB, do not support per-partition optimization; in these cases, ALTER TABLE … OPTIMIZE PARTITION rebuilds the entire table. In MySQL 5.6.9 and later, running this statement on such a table causes the entire table to rebuilt and analyzed, and an appropriate warning to be issued. (Bug #11751825, Bug #42822) Use ALTER TABLE … REBUILD PARTITION and ALTER TABLE … ANALYZE PARTITION instead, to avoid this issue.</p></blockquote><p>Analyzing partitions.讀取并保存分區的鍵分布<br>Example:</p><pre class="brush:sql;">ALTER TABLE t1 ANALYZE PARTITION p3;</pre><p>Repairing partitions.修補被破壞的分區<br>Example:</p><pre class="brush:sql;">ALTER TABLE t1 REPAIR PARTITION p0,p1;</pre><p>Checking partitions.可以使用幾乎與對非分區表使用CHECK TABLE 相同的方式檢查分區。<br>Example:</p><pre class="brush:sql;">ALTER TABLE trb3 CHECK PARTITION p1;</pre><p>這個命令可以告訴你表trb3的分區p1中的數據或索引是否已經被破壞。如果發生了這種情況,使用“ALTER TABLE … REPAIR PARTITION”來修補該分區。</p><h4 id="以上每個命令都支持將分區換成all">以上每個命令都支持將分區換成ALL</h4><blockquote><p>The use of mysqlcheck and myisamchk is not supported with partitioned tables.</p></blockquote><p>mysqlcheck和myisamchk不支持分區表</p><p>你可以使用 ALTER TABLE … TRUNCATE PARTITION. 來刪除一個或多個分區中的數據<br>如:ALTER TABLE … TRUNCATE PARTITION ALL刪除所有數據</p><p>ANALYZE, CHECK, OPTIMIZE, REBUILD, REPAIR, and TRUNCATE 操作不支持 subpartitions.</p></enddate>

以上所述是小編給大家介紹的Mysql分區表的管理與維護,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕欧美日韩va免费视频| 欧美黑人狂野猛交老妇| 精品国偷自产在线视频99| 色噜噜狠狠色综合网图区| 亚洲精品乱码久久久久久按摩观| **欧美日韩vr在线| 国产久一一精品| 狠狠爱在线视频一区| 91色在线观看| 欧美大片在线影院| 在线精品91av| 欧美精品videosex牲欧美| 欧美最近摘花xxxx摘花| 色偷偷综合社区| 欧美性jizz18性欧美| 久久99青青精品免费观看| 中文字幕亚洲一区二区三区五十路| 国产精品视频区1| 久久久亚洲天堂| 欧美国产第一页| 亚洲最大福利网站| 国产精品流白浆视频| 97久久伊人激情网| 国产一级揄自揄精品视频| 精品国内产的精品视频在线观看| 国产精品免费久久久久影院| 亚洲国产精品嫩草影院久久| 黑人巨大精品欧美一区二区| 亚洲成人精品久久久| 亚洲一区二区三区在线免费观看| 欧美一区二区三区图| 97热在线精品视频在线观看| 亚洲福利视频久久| 亚洲国产日韩一区| 国产视频在线一区二区| 亚洲精品aⅴ中文字幕乱码| 日韩一区二区福利| 久久久久久国产免费| 国产精品欧美一区二区三区奶水| 国产精品激情av电影在线观看| 91久久在线播放| 欧美麻豆久久久久久中文| 亚洲一区二区三区777| 久久久精品影院| 欧美精品一区在线播放| 在线观看国产精品日韩av| 庆余年2免费日韩剧观看大牛| 精品久久久久久中文字幕大豆网| 国产一区二区激情| 国产成人自拍视频在线观看| 久久婷婷国产麻豆91天堂| 97视频在线观看网址| 久久亚洲精品毛片| 亚洲国产精品va在线观看黑人| 久久久久中文字幕2018| 久久伊人精品一区二区三区| 久久夜色精品国产欧美乱| 一区二区三区四区视频| 欧美性极品xxxx做受| 国产精品2018| 中文字幕日本精品| 亚洲视频专区在线| 欧美极品少妇与黑人| 亚洲娇小xxxx欧美娇小| 成人午夜在线影院| 国产99久久精品一区二区 夜夜躁日日躁| 欧美日韩亚洲天堂| 在线播放国产精品| 久久久成人的性感天堂| 国产在线播放91| 黑人巨大精品欧美一区二区| 精品福利在线视频| 日本久久亚洲电影| 久久夜色精品国产欧美乱| 日韩免费高清在线观看| 久久乐国产精品| 日本成人在线视频网址| 欧美特黄级在线| 亚洲激情第一页| 欧美成人在线网站| 午夜精品在线观看| 久久久久久久久国产精品| 国产精品久久久久久久久免费看| 国产精品视频区| 亚洲人成77777在线观看网| 国产成人精品999| 亚洲精品在线91| 最近免费中文字幕视频2019| 国产丝袜一区二区三区免费视频| 久久理论片午夜琪琪电影网| 亚洲精品一区二区三区不| 国产精品成人观看视频国产奇米| 亚洲二区在线播放视频| 成人av番号网| 欧美日韩亚洲高清| 亚洲精品视频在线播放| 亚洲第五色综合网| 精品视频久久久| 在线成人一区二区| 久久精品一本久久99精品| 成人黄色免费网站在线观看| 欧美在线精品免播放器视频| 亚洲欧美在线x视频| www.久久久久久.com| 45www国产精品网站| 国产a∨精品一区二区三区不卡| 日韩欧美中文字幕在线观看| 亚洲欧美日韩一区二区在线| 亚洲性69xxxbbb| 51久久精品夜色国产麻豆| 欧美成人精品一区二区三区| 欧美性xxxx极品hd欧美风情| 91国产美女在线观看| 亚洲欧美日韩一区在线| 亚洲精品自在久久| 日韩中文字幕不卡视频| 91精品国产91久久| 久久视频在线看| 亚洲毛片在线看| 中文字幕亚洲情99在线| 自拍偷拍亚洲精品| 日本精品视频在线播放| 国产成人福利网站| 亚洲第一页在线| 久久成人综合视频| 欧美激情精品久久久| 欧美亚洲在线播放| 中文字幕av日韩| 日韩视频在线免费| 日韩免费在线播放| 91亚洲精品久久久久久久久久久久| 亚洲电影在线看| 欧美精品久久久久久久| 亚洲国产精彩中文乱码av| 欧美另类xxx| 国产情人节一区| 亚洲国产成人精品电影| 在线观看欧美日韩| 国产精品国语对白| 成人有码视频在线播放| 欧美激情精品久久久久久| 久久九九精品99国产精品| 日韩欧美在线视频免费观看| 国产亚洲成av人片在线观看桃| 国产精品午夜视频| 国产精品日日摸夜夜添夜夜av| 国产视频在线一区二区| 国产精品最新在线观看| 2020国产精品视频| 国产精品久久二区| 国产精品jvid在线观看蜜臀| 中文字幕在线日韩| 91在线精品播放| 久久精品国产免费观看| 色www亚洲国产张柏芝| 欧美极品在线视频| 亚洲国产精品一区二区三区| 国产精品96久久久久久又黄又硬| 在线观看国产精品日韩av| 国产午夜精品免费一区二区三区| 777精品视频| 亚洲字幕在线观看| 日韩亚洲在线观看| 久久久久久亚洲精品不卡|