日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL LIST分区(转载)

發布時間:2023/11/29 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL LIST分区(转载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LIST分區和RANGE分區非常的相似,主要區別在于LIST是枚舉值列表的集合,RANGE是連續的區間值的集合。二者在語法方面非常的相似。同樣建議LIST分區列是非null列,否則插入null值如果枚舉列表里面不存在null值會插入失敗,這點和其它的分區不一樣,RANGE分區會將其作為最小分區值存儲,HASH\KEY分為會將其轉換成0存儲,主要LIST分區只支持整形,非整形字段需要通過函數轉換成整形;5.5版本之后可以不需要函數轉換使用LIST COLUMN分區支持非整形字段,在COLUMN分區中有詳細的講解。

?

一、創建分區

List各個分區枚舉的值只需要不相同即可,沒有固定的順序。

CREATE TABLE tblist (id INT NOT NULL,store_id INT ) PARTITION BY LIST(store_id) (PARTITION a VALUES IN (1,5,6),PARTITION b VALUES IN (2,7,8),PARTITION c VALUES IN (3,9,10),PARTITION d VALUES IN (4,11,12) ); SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tblist';

?1.插入數據

insert into tblist(id,store_id) values(1,1),(7,7);

往a、b兩個分區中各插入一條記錄

2.插入不在列表中的值

?

當往分區中插入不在枚舉列表中的值是會插入失敗,插入null值如果null值不在枚舉列表中也同樣失敗

二、分區管理

1.增加分區

ALTER TABLE tblist ADD PARTITION (PARTITION e VALUES IN (20));

注意:不能增加包含現有任意值的分區。

2.合并分區

ALTER TABLE tblist REORGANIZE PARTITION a,b INTO (PARTITION m VALUES IN (1,5,6,2,7,8));

將分區a,b合并為分區m

注意:同RANGE分區一樣,只能合并相鄰的幾個分區,不能跨分區合并。例如不能合并a,c兩個分區,只能通過合并a,b,c

3.拆分分區

ALTER TABLE tblist REORGANIZE PARTITION a,b,c INTO (PARTITION n VALUES IN (1,5,6,3,9,10), PARTITION m VALUES IN (2,7,8));ALTER TABLE tblist REORGANIZE PARTITION n INTO ( PARTITION a VALUES IN (1,5,6),PARTITION b VALUES IN (3,9,10));

經過兩輪的拆分,枚舉列表(3,9,10)排到了(2,7,8)的前面去了;其實是這樣的,一開始合并abc成nm兩個分區由于n中的枚舉值小于m所以n在m的前面,后面再拆分n分區由于n分區在m分區的前面所以拆分出來的分區也是排在m分區的前面,由于a分區的值小于b分區的值所以a排在b的前面。

注意:1.在5.7.12版本中測試發現,合并和拆分分區重新定義的枚舉值可以不是原來的值,如果原來的枚舉值包含了數據而新合并或拆分的分區枚舉值又不不包含原來的枚舉值會造成數據丟失。雖然不知道為什么mysql不會禁止該行為,但是人為的要求無論是合并還是拆分分區枚舉值保持不變,或者只能增加不能減少,這樣能保證數據不丟失。

2.合并和拆分后的分區由于是相鄰的分區進行合并和拆分會根據原本的分區的值新的分區也會在原本的分區的順序位置。

4.刪除分區

ALTER TABLE tblist DROP PARTITION e;

注意:刪除分區同時會將分區中的數據刪除,同時枚舉的list值也被刪除,后面無法往表中插入該值的數據。

三、其它分區

1.對時間字段進行分區

CREATE TABLE listdate (id INT NOT NULL,hired DATETIME NOT NULL ) PARTITION BY LIST( YEAR(hired) ) (PARTITION a VALUES IN (1990),PARTITION b VALUES IN (1991),PARTITION c VALUES IN (1992),PARTITION d VALUES IN (1993) );ALTER TABLE listdate ADD INDEX ix_hired(hired);INSERT INTO listdate() VALUES(1,'1990-01-01 10:00:00'),(1,'1991-01-01 10:00:00'),(1,'1992-01-01 10:00:00'); EXPLAIN SELECT * FROM listdate WHERE hired='1990-01-01 10:00:00';

?LIST分區也支持對非整形的時間類型字段的轉換分區。

四、移除表的分區

ALTER TABLE tablename REMOVE PARTITIONING ;

注意:使用remove移除分區是僅僅移除分區的定義,并不會刪除數據和drop PARTITION不一樣,后者會連同數據一起刪除

?

?

參考:?

RANGE分區:http://www.cnblogs.com/chenmh/p/5627912.html

COLUMN分區:http://www.cnblogs.com/chenmh/p/5630834.html

HASH分區:http://www.cnblogs.com/chenmh/p/5644496.html

KEY分區:http://www.cnblogs.com/chenmh/p/5647210.html

子分區:http://www.cnblogs.com/chenmh/p/5649447.html

指定各分區路徑:http://www.cnblogs.com/chenmh/p/5644713.html

分區索引:http://www.cnblogs.com/chenmh/p/5761995.html

分區介紹總結:http://www.cnblogs.com/chenmh/p/5623474.html

總結

?重新定義LIST分區時只能重新定義相鄰的分區,不能跳過分區定義,重新定義的分區列表枚舉必須包含原分區的列表枚舉,如果丟失某個包含記錄的枚舉值那么數據也將被刪除;重新定義分區不能改變分區的類型。

?

轉載于:https://www.cnblogs.com/fanxiumin/p/6034194.html

總結

以上是生活随笔為你收集整理的MySQL LIST分区(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。