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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PG的非分割槽表線上轉分割槽表
- 非分割槽錶轉換成分割槽表以及注意事項
- Oracle 12C新特性-線上把非分割槽錶轉為分割槽表Oracle
- 【MYSQL】 分割槽表MySql
- MySQL 分割槽表探索MySql
- 非分割槽錶轉換成分割槽表
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- LightDB 22.4 新特性之相容Oracle線上轉換普通表為分割槽表Oracle
- Mysql表分割槽實現MySql
- mysql 進行表分割槽MySql
- Mysql表分割槽實操MySql
- zabbix上對mysql資料庫做分割槽表MySql資料庫
- 線上重定義與普通表改為分割槽表
- MySQL調優之分割槽表MySql
- MySQL 分割槽表知識整理MySql
- oracle分割槽表和分割槽表exchangeOracle
- 線上重定義方式將普通表修改為分割槽表
- Oracle 12.2之後ALTER TABLE .. MODIFY轉換非分割槽表為分割槽表Oracle
- (3) MySQL分割槽表使用方法MySql
- MySQL資料表分割槽手記MySql
- mysql~關於mysql分割槽表的測試MySql
- oracle分割槽表和非分割槽表exchangeOracle
- mysql 分割槽MySql
- mysql分割槽表佔用大量容量處理(最佳化)及歸檔分割槽表MySql
- 第41期:MySQL 雜湊分割槽表MySql
- 第40期:MySQL 分割槽表案例分享MySql
- MySql分表、分庫、分片和分割槽MySql
- MySQL分表後原分割槽表處理方案MySql
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- 理解MySQL分割槽MySql
- 搞懂MySQL分割槽MySql
- MySql建立分割槽MySql
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 移動分割槽表和分割槽索引的表空間索引
- 線上重定義的操作步驟__普通錶轉換為分割槽表的實驗案例
- MySql資料分割槽操作之新增分割槽操作MySql