mysql分區(qū)表的增刪改查的實現(xiàn)示例
一、mysql創(chuàng)建表分區(qū)
二、基本分區(qū)信息查詢
官方鏈接 : mysql分區(qū)的相關(guān)增刪改查操作
2.1 查看mysql版本是否支持分區(qū)
mysql> show plugins
即:看名為partition的插件是否為active,active表示支持分區(qū)。
并且同一個數(shù)據(jù)庫,不同表支持分區(qū)可以是不同的存儲引擎,但是表分區(qū)后所有的分區(qū)都必須和表使用相同引擎。
MyISAM和InnoDB都支持分區(qū)。
MySQL 8都無需插件即可支持分區(qū),且只有InnoDB支持,MyISAM不支持分區(qū)。
MySQL 5.7 的NDB支持分區(qū)有自己的規(guī)則。
MySQL只支持水平分區(qū),對垂直分區(qū)的支持無計劃。
2.2 查看表是否為分區(qū)表
2.2.1 查詢表分區(qū)信息
- 查看創(chuàng)建分區(qū)表的create語句:
show create table 表名;
示例:show create table dev_fac;
- 查看表是不是分區(qū)表:show table status;
示例:show table status;
2.2.2 查看表的所有分區(qū)
查看對應(yīng)數(shù)據(jù)庫、對應(yīng)表的所有分區(qū)信息
SELECT partition_name part, partition_expression expr, partition_description descr, table_rows FROM INFORMATION_SCHEMA. PARTITIONS WHERE TABLE_SCHEMA = "庫名稱" AND TABLE_NAME = "表名稱";
示例:
SELECT partition_name part, partition_expression expr, partition_description descr, table_rows FROM INFORMATION_SCHEMA. PARTITIONS WHERE TABLE_SCHEMA = "test" AND TABLE_NAME = "dev_fac";
結(jié)果如下:
三、分區(qū)表的查詢操作
MySQL 5.7支持顯式選擇分區(qū)和子分區(qū),在執(zhí)行語句時,應(yīng)檢查是否有與給定WHERE條件匹配的行。分區(qū)選擇與分區(qū)精簡相似,分區(qū)選擇只檢查特定分區(qū)的匹配情況,但在兩個關(guān)鍵方面有所不同:
- 分區(qū)選擇要檢查的分區(qū)由語句的發(fā)布者指定,而分區(qū)精簡它是自動的。
- 盡管分區(qū)精簡僅適用于查詢,但查詢和許多DML語句都支持分區(qū)的顯式選擇。
- 支持顯式分區(qū)選擇的SQL語句如下:
SELECT * FROM 表名 PARTITION (分區(qū)名稱1,分區(qū)名稱2,分區(qū)名稱n) WHERE 查詢條件;
示例:
- 隱式分區(qū)要注意where條件中需要包含分區(qū)的關(guān)鍵字,以確保查詢時是通過分區(qū)查詢,而不是全表掃描,查詢語句如下:
SELECT * FROM 表名 WHERE 查詢條件;
顯示掃描哪些分區(qū),及它們是如何使用的:
在查詢語句前面加上EXPLAIN PARTITIONS 關(guān)鍵字.
示例: EXPLAIN PARTITIONS SELECT * FROM dev_date WHERE Partition_Date = ‘2022-11-25 16:07:00’;
四、分區(qū)表的增刪改操作
4.1 新增分區(qū)
4.1.1 給已有的表加上分區(qū)
alter table 表名 partition by 分區(qū)邏輯;
示例:
alter table results partition by RANGE (month(ttime)) ( PARTITION p5 VALUES LESS THAN (6) , PARTITION p11 VALUES LESS THAN (12), PARTITION P12 VALUES LESS THAN MAXVALUE );
4.1.2 新增分區(qū)
新增分區(qū)需要先確認(rèn)表為分區(qū)表。
alter table 表名 add partition (partition 分區(qū)名稱 values less than (邏輯));
1. range添加新分區(qū)
mysql> alter table user add partition(partition p4 values less than MAXVALUE);
2. list添加新分區(qū)
mysql> alter table list_part add partition(partition p4 values in (25,26,28));
3. hash重新分區(qū)
mysql> alter table hash_part add partition partitions 4;
4.key重新分區(qū)
mysql> alter table key_part add partition partitions 4;
4.2 重新分區(qū)
1. range重新分區(qū)
mysql> ALTER TABLE user REORGANIZE PARTITION p0,p1,p2,p3,p4 INTO (PARTITION p0 VALUES LESS THAN MAXVALUE);
2. list重新分區(qū)
mysql> ALTER TABLE list_part REORGANIZE PARTITION p0,p1,p2,p3,p4 INTO (PARTITION p0 VALUES in (1,2,3,4,5));
3. hash和key分區(qū)不能用REORGANIZE,官方網(wǎng)站說的很清楚
mysql> ALTER TABLE key_part REORGANIZE PARTITION COALESCE PARTITION 9;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘PARTITION 9’ at line 1
4.3 刪除
4.3.1 刪除表
表刪除,對應(yīng)的分區(qū)及數(shù)據(jù)也會刪除。
DROP TABLE 表名稱`;
4.3.2 刪除分區(qū)
alter table 表名 drop partition 分區(qū)名稱; -- 示例 alter table staff drop partition p0;
如果你使用例子給出的分區(qū)方案,你只需執(zhí)行語句alter table staff drop partition p0
來刪除所有在1991年前就已經(jīng)停止工作的雇員相對應(yīng)的所有行。對于有大量行的表,這比運行一個如”delete from staff WHERE year(separated) <= 1990;”這樣的一個DELETE查詢要有效得多。
4.3.4 刪除指定分區(qū)中的數(shù)據(jù)
DELETE FROM 表名 PARTITION (分區(qū)名稱1,分區(qū)名稱2,分區(qū)名稱n) WHERE 子句
示例:DELETE FROM dev_fac
PARTITION(p1000000000000001) WHERE devName = ‘D10000000000000011名稱’
4.4 數(shù)據(jù)插入
4.4.1 按表插入
直接按表插入,數(shù)據(jù)庫自動根據(jù)數(shù)據(jù)查找分區(qū)插入。
INSERT INTO `dev_fac` VALUES ( 'D10000000000000010', 'D10000000000000010名稱', 'F1000000000000001', '2022-11-25 16:07:00', '1', '1669363620000', '1', '1000000000000001', '2022-11-25 16:07:00' );
4.4.2 按分區(qū)插入
插入語句中指定插入的分區(qū)信息。
INSERT INTO 表名 PARTITION (分區(qū)名稱1,分區(qū)名稱2,分區(qū)名稱n) 列名 VALUES()
示例:
INSERT INTO dev_fac PARTITION (1000000000000001) VALUES( ‘D10000000000000012', ‘D10000000000000012名稱', ‘F1000000000000001', ‘2022-11-25 16:07:00', ‘1', ‘1669363620000', ‘1', ‘1000000000000001', ‘2022-11-25 16:07:00' );
4.4.2 按分區(qū)批量插入
插入語句中指定插入的分區(qū)信息且一次插入多條數(shù)據(jù)。
INSERT INTO 表名 PARTITION (分區(qū)名稱1,分區(qū)名稱2,分區(qū)名稱n) 列名 VALUES(),(),(),...,()
示例:
INSERT INTO `dev_fac` PARTITION (p1000000000000001) VALUES( 'D10000000000000012', 'D10000000000000012名稱', 'F1000000000000001', '2022-11-25 16:07:00', '1', '1669363620000', '1', '1000000000000001', '2022-11-25 17:07:00' ), ( 'D10000000000000013', 'D10000000000000013名稱', 'F1000000000000001', '2022-11-25 16:07:00', '1', '1669363620000', '1', '1000000000000001', '2022-11-25 17:07:00' );
到此這篇關(guān)于mysql分區(qū)表的增刪改查的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)mysql分區(qū)表增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL slave_net_timeout參數(shù)解決的一個集群問題案例
這篇文章主要介紹了MySQL slave_net_timeout參數(shù)解決的一個集群問題案例,問題日志請見正文,本文使用slave_net_timeout參數(shù)解決了這個問題,需要的朋友可以參考下2015-05-05MySQL數(shù)據(jù)庫中表的查詢實例(單表和多表)
查詢數(shù)據(jù)是數(shù)據(jù)庫操作中最常用,也是最重要的操作,下面這篇文章主要介紹了MySQL數(shù)據(jù)庫中表的查詢的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03一鍵搭建MYSQL主從,輕松應(yīng)對數(shù)據(jù)備份與恢復(fù)
MYSQL主從是一種常見的數(shù)據(jù)庫架構(gòu),它可以提高數(shù)據(jù)庫的可用性和性能,在主從架構(gòu)中,主數(shù)據(jù)庫負(fù)責(zé)處理寫操作,而從數(shù)據(jù)庫負(fù)責(zé)處理讀操作,當(dāng)主數(shù)據(jù)庫發(fā)生故障時,從數(shù)據(jù)庫可以接管并繼續(xù)提供服務(wù),從而實現(xiàn)高可用性,需要的朋友可以參考下2023-10-10