MySQL線上轉分割槽表(以及TiDB)
上週我們做了Oracle的線上將非分割槽錶轉換成分割槽表。這做幾個其他資料庫的。
建立一個表,模擬
上週講了Oracle的線上非分割槽變成分割槽,今天講講其他的。 首先是MySQL的,建立一個簡單的表,模擬寫入一點資料。
實驗步驟如下:
mysql> CREATE TABLE t1 (id int NOT NULL AUTO_INCREMENT, a int, t datetime NOT NULL, PRIMARY KEY (id) );
Query OK, 0 rows affected (0.29 sec)
mysql> insert into t1 (a,t) values (1,'2022-01-01');
Query OK, 1 row affected (0.06 sec)
mysql> insert into t1 (a,t) values (2,'2022-02-01');
Query OK, 1 row affected (0.09 sec)
mysql> insert into t1 (a,t) values (4,'2022-03-01');
Query OK, 1 row affected (0.03 sec)
mysql> insert into t1 (a,t) values (3,'2022-04-01');
Query OK, 1 row affected (0.02 sec)
mysql> insert into t1 (a,t) values (5,'2022-05-01');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 (a,t) values (6,'2022-06-01');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 (a,t) values (7,'2022-07-01');
Query OK, 1 row affected (0.00 sec)
查詢一下資料,普通的表。順便看一下表結構。
如果要把非分割槽錶轉換成分割槽表,最主要的是分割槽鍵,而MySQL的時間範圍分割槽鍵不能僅僅是時間,一定要主鍵+時間構成新的主鍵。
所以面臨的是要刪除主鍵和新建主鍵。
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(id,t); 這句看上去簡單,但是如果表大的話,實際上實施起來有困難的,如果很大的表幾乎不現實。我的意思是停機做都有難度,更別說線上做了。
alter table t1 partition by range(to_days(t))
-> (
-> PARTITION p1 VALUES LESS THAN (to_days('2022-02-01')),
-> PARTITION p2 VALUES LESS THAN (to_days('2022-03-01')),
-> PARTITION p3 VALUES LESS THAN (to_days('2022-04-01')),
-> PARTITION p4 VALUES LESS THAN (to_days('2022-05-01')),
-> PARTITION p5 VALUES LESS THAN (to_days('2022-06-01')),
-> PARTITION p6 VALUES LESS THAN (to_days('2022-07-01')),
-> PARTITION p7 VALUES LESS THAN (to_days('2022-08-01'))
-> );
執行這個命令以後,可以看到查詢表還是一樣的方法。分割槽是對應用透明的。
但是如果我截斷分割槽以後,分割槽的資料就被刪除了。同樣磁碟空間也馬上釋放。由於DDL很快,所以也不存在鎖。最大的問題是在表很大時候,從非分割槽變成分割槽,很痛苦。這點上不得不說還是Oracle最省心了。 不過MySQL截斷分割槽倒是省心,沒有Oracle的update index的那個小引數。
既然TiDB相容MySQL看看TiDB怎麼做。用MySQL的方法做一遍,報錯。不能執行。
查了資料沒結果,最後問了原廠,目前看來是不能做的。即設計好了就這樣,不要動。設計很重要啊。下一篇我們講講PG的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2905214/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 分割槽表 partition線上修改分割槽欄位MySql
- 將mysql非分割槽錶轉換為分割槽表MySql
- 非分割槽錶轉換成分割槽表以及注意事項
- Oracle線上將普通錶轉分割槽表Oracle
- mysql 動態新建以及刪除分割槽表MySql
- 【MYSQL】 分割槽表MySql
- MySQL 分割槽表MySql
- MySQL分割槽表MySql
- MySQL 分割槽表探索MySql
- mysql 分表 分割槽MySql
- mysql 分割槽表用法MySql
- MySQL表分割槽管理MySql
- Oracle 12C新特性-線上把非分割槽錶轉為分割槽表Oracle
- 普通錶轉換分割槽表-線上重定義
- 非分割槽錶轉換成分割槽表
- 線上重定義 ?普通錶轉換成分割槽表
- mysql 進行表分割槽MySql
- Mysql表分割槽實現MySql
- mysql分割槽表筆記MySql筆記
- MySQL入門--分割槽表MySql
- mysql —— 分表分割槽(1)MySql
- MySQL的List分割槽表MySql
- Mysql表分割槽實操MySql
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- oracle 分割槽表 概念以及常用操作Oracle
- MySQL分割槽表的分割槽原理和優缺點MySql
- 將非分割槽錶轉換為分割槽表
- 使用dbms_redefinition包線上把大資料量非分割槽錶轉換為分割槽表大資料
- ORACLE 普通錶轉換成分割槽表(線上重定義)Oracle
- 分割槽表PARTITION table(轉)
- ORACLE分割槽表管理[轉]Oracle
- MySQL 分割槽表知識整理MySql
- MySQL調優之分割槽表MySql
- mysql的分割槽和分表MySql
- mysql的分割槽與分表MySql
- mysql分割槽表小結2MySql
- mysql表水平拆分和分割槽分表MySql
- 線上重定義分割槽表和NOLOGGING APPEND分割槽表對比APP