mysql分區(qū)表的增刪改查的實(shí)現(xiàn)示例
一、mysql創(chuàng)建表分區(qū)
二、基本分區(qū)信息查詢
官方鏈接 : mysql分區(qū)的相關(guān)增刪改查操作
2.1 查看mysql版本是否支持分區(qū)
mysql> show plugins
即:看名為partition的插件是否為active,active表示支持分區(qū)。
并且同一個(gè)數(shù)據(jù)庫(kù),不同表支持分區(qū)可以是不同的存儲(chǔ)引擎,但是表分區(qū)后所有的分區(qū)都必須和表使用相同引擎。
MyISAM和InnoDB都支持分區(qū)。
MySQL 8都無(wú)需插件即可支持分區(qū),且只有InnoDB支持,MyISAM不支持分區(qū)。
MySQL 5.7 的NDB支持分區(qū)有自己的規(guī)則。
MySQL只支持水平分區(qū),對(duì)垂直分區(qū)的支持無(wú)計(jì)劃。
2.2 查看表是否為分區(qū)表
2.2.1 查詢表分區(qū)信息
- 查看創(chuàng)建分區(qū)表的create語(yǔ)句:
show create table 表名;
示例:show create table dev_fac;
- 查看表是不是分區(qū)表:show table status;
示例:show table status;
2.2.2 查看表的所有分區(qū)
查看對(duì)應(yīng)數(shù)據(jù)庫(kù)、對(duì)應(yīng)表的所有分區(qū)信息
SELECT partition_name part, partition_expression expr, partition_description descr, table_rows FROM INFORMATION_SCHEMA. PARTITIONS WHERE TABLE_SCHEMA = "庫(kù)名稱" 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ǔ)句時(shí),應(yīng)檢查是否有與給定WHERE條件匹配的行。分區(qū)選擇與分區(qū)精簡(jiǎn)相似,分區(qū)選擇只檢查特定分區(qū)的匹配情況,但在兩個(gè)關(guān)鍵方面有所不同:
- 分區(qū)選擇要檢查的分區(qū)由語(yǔ)句的發(fā)布者指定,而分區(qū)精簡(jiǎn)它是自動(dòng)的。
- 盡管分區(qū)精簡(jiǎn)僅適用于查詢,但查詢和許多DML語(yǔ)句都支持分區(qū)的顯式選擇。
- 支持顯式分區(qū)選擇的SQL語(yǔ)句如下:
SELECT * FROM 表名 PARTITION (分區(qū)名稱1,分區(qū)名稱2,分區(qū)名稱n) WHERE 查詢條件;
示例:
- 隱式分區(qū)要注意where條件中需要包含分區(qū)的關(guān)鍵字,以確保查詢時(shí)是通過分區(qū)查詢,而不是全表掃描,查詢語(yǔ)句如下:
SELECT * FROM 表名 WHERE 查詢條件;
顯示掃描哪些分區(qū),及它們是如何使用的:
在查詢語(yǔ)句前面加上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 刪除表
表刪除,對(duì)應(yīng)的分區(qū)及數(shù)據(jù)也會(huì)刪除。
DROP TABLE 表名稱`;
4.3.2 刪除分區(qū)
alter table 表名 drop partition 分區(qū)名稱; -- 示例 alter table staff drop partition p0;
如果你使用例子給出的分區(qū)方案,你只需執(zhí)行語(yǔ)句alter table staff drop partition p0
來(lái)刪除所有在1991年前就已經(jīng)停止工作的雇員相對(duì)應(yīng)的所有行。對(duì)于有大量行的表,這比運(yùn)行一個(gè)如”delete from staff WHERE year(separated) <= 1990;”這樣的一個(gè)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ù)庫(kù)自動(dòng)根據(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ū)插入
插入語(yǔ)句中指定插入的分區(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ū)批量插入
插入語(yǔ)句中指定插入的分區(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ū)表的增刪改查的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)mysql分區(qū)表增刪改查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL slave_net_timeout參數(shù)解決的一個(gè)集群?jiǎn)栴}案例
這篇文章主要介紹了MySQL slave_net_timeout參數(shù)解決的一個(gè)集群?jiǎn)栴}案例,問題日志請(qǐng)見正文,本文使用slave_net_timeout參數(shù)解決了這個(gè)問題,需要的朋友可以參考下2015-05-05MySQL UPDATE 語(yǔ)句一個(gè)“經(jīng)典”的坑
這篇文章主要介紹了MySQL UPDATE 語(yǔ)句一個(gè)“經(jīng)典”的坑,一個(gè)非常有意思的話題,感興趣的小伙伴可以參考下面文章的具體內(nèi)容哦2021-10-10MySQL?varchar(n)能存儲(chǔ)幾個(gè)漢字
這篇文章主要介紹了MySQL varchar(n)能存儲(chǔ)幾個(gè)漢字,MySQL中varchar(n)表示n個(gè)字符,無(wú)論漢字和英文,Mysql都能存入n個(gè)字符,僅是實(shí)際字節(jié)長(zhǎng)度有所區(qū)別,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05MySQL數(shù)據(jù)庫(kù)中表的查詢實(shí)例(單表和多表)
查詢數(shù)據(jù)是數(shù)據(jù)庫(kù)操作中最常用,也是最重要的操作,下面這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)中表的查詢的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03驗(yàn)證Mysql中聯(lián)合索引的最左匹配原則詳情
這篇文章主要介紹了驗(yàn)證Mysql中聯(lián)合索引的最左匹配原則詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08一鍵搭建MYSQL主從,輕松應(yīng)對(duì)數(shù)據(jù)備份與恢復(fù)
MYSQL主從是一種常見的數(shù)據(jù)庫(kù)架構(gòu),它可以提高數(shù)據(jù)庫(kù)的可用性和性能,在主從架構(gòu)中,主數(shù)據(jù)庫(kù)負(fù)責(zé)處理寫操作,而從數(shù)據(jù)庫(kù)負(fù)責(zé)處理讀操作,當(dāng)主數(shù)據(jù)庫(kù)發(fā)生故障時(shí),從數(shù)據(jù)庫(kù)可以接管并繼續(xù)提供服務(wù),從而實(shí)現(xiàn)高可用性,需要的朋友可以參考下2023-10-10