首頁 > 軟體

MySQL分割區表管理命令彙總

2022-03-21 13:00:21

前言:

分割區是一種表的設計模式,正確的分割區可以極大地提升資料庫的查詢效率,完成更高質量的SQL程式設計。但是如果錯誤地使用分割區,那麼分割區可能帶來毀滅性的的結果。

分割區功能並不是在儲存引擎層完成的,因此不只有InnoDB儲存引擎支援分割區,常見的儲存引擎MyISAM、NDB等都支援分割區。但是並不是所有的儲存引擎都支援,如CSV、FEDORATED、MERGE等就不支援分割區。在使用此分割區功能前,應該對選擇的儲存引擎對分割區的支援有所瞭解。

MySQL資料庫在5.1版本時新增了對分割區的支援,分割區的過程是將一個表或索引分解為多個更小、更可管理的部分。就存取資料庫的應用而言,從邏輯上講,只有一個表或一個索引,但是在物理上這個表或索引可能由數十個物理分割區組成。每個分割區都是獨立的物件,可以獨自處理,也可以作為一個更大物件的一部分進行處理。

MySQL資料庫支援的分割區型別為水平分割區(指將同一個表中不同行的記錄分配到不同的物理檔案中),並不支援垂直分割區(指將同一表中不同列的記錄分配到不同的物理檔案中)。此外,MySQL資料庫的分割區是區域性分割區索引,一個分割區中既存放了資料又存放了索引。而全域性分割區是指,資料存放在各個分割區中,但是所有資料的索引放在一個物件中。目前,MySQL資料庫還不支援全域性分割區,接下來我們一起來看看分割區表的管理吧!

一、ANALYZE和CHECK PARTITION 分析和檢查分割區

ANALYZE分析分割區:

ALTER TABLE t_test_task_result ANALYZE PARTITION p20220218,p20220219;
+------------------------------------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------------------------------+---------+----------+----------+
| testdb.t_test_task_result | analyze | status | OK |
+------------------------------------------+---------+----------+----------+
1 row in set (0.01 sec)

CHECK 檢查分割區是否存在錯誤:

 ALTER TABLE t_test_task_result check PARTITION p20220218,p20220219;
+------------------------------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------------------------------+-------+----------+----------+
| testdb.t_test_task_result | check | status | OK |
+------------------------------------------+-------+----------+----------+
1 row in set (0.03 sec)

二、REPAIR 修復分割區

ALTER TABLE t_test_task_result repair PARTITION p20220218,p20220219;
+------------------------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------------------------------+--------+----------+----------+
| testdb.t_test_task_result | repair | status | OK |
+------------------------------------------+--------+----------+----------+

三、OPTIMIZE 分割區

該命令主要是用於回收空閒空間和分割區的碎片整理。對分割區執行該命令,相當於依次對分割區執行 CHECK PARTITION, ANALYZE PARTITION,REPAIR PARTITION命令。

會鎖表:

ALTER TABLE t_test_task_result OPTIMIZE PARTITION p20220218,p20220219;
+------------------------------------------+----------+----------+---------------------------------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------------------------------+----------+----------+---------------------------------------------------------------------------------------------+
| testdb.t_test_task_result | optimize | note | Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. |
| testdb.t_test_task_result | optimize | status | OK |
+------------------------------------------+----------+----------+---------------------------------------------------------------------------------------------+
2 rows in set (1 min 35.75 sec)

四、REBUILD分割區

重建分割區,它相當於先刪除分割區中的資料,然後重新插入。這個主要是用於分割區的碎片整理。這個操作會操作鎖表

ALTER TABLE t_test_task_result REBUILD PARTITION p20220218,p20220219;
Query OK, 0 rows affected (0.16 sec)
Records: 0 Duplicates: 0 Warnings: 0

ALTER TABLE t_test_task_result REBUILD PARTITION p20220225,p20220226,p20220227,p20220228;
Query OK, 0 rows affected (2 min 9.38 sec)
Records: 0 Duplicates: 0 Warnings: 0

五、新增和刪除分割區

新增分割區測試: ADD PARTITION(新增分割區)

ALTER TABLE t_test_task_result ADD PARTITION (PARTITION p20220401 VALUES LESS THAN (TO_DAYS('2022-04-01')));

ALTER TABLE t_test_task_result ADD PARTITION (PARTITION p20220401 VALUES LESS THAN (TO_DAYS('2022-04-01')));
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0

刪除分割區測試:DROP PARTITION(刪除分割區)

ALTER TABLE t_test_task_result DROP PARTITION p20220218;
##提示刪除分割區是物理刪除,操作非常快
 ALTER TABLE t_test_task_result DROP PARTITION p20220218;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
root@testdb 15:02: [testdb]> ALTER TABLE t_test_task_result DROP PARTITION p20220219,p20220220;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0

到此這篇關於MySQL分割區表管理命令彙總 的文章就介紹到這了,更多相關MySQL分割區表管理命令內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com