泰州企业自助建站,wordpress 做相册,thegem wordpress,广告设计与制作主修课程有哪些LIST分区和RANGE分区非常的相似#xff0c;主要区别在于LIST是枚举值列表的集合#xff0c;RANGE是连续的区间值的集合。二者在语法方面非常的相似。同样建议LIST分区列是非null列#xff0c;否则插入null值如果枚举列表里面不存在null值会插入失败#xff0c;这点和其它的…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_SCHEMASCHEMA() AND TABLE_NAMEtblist; 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 hired1990-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