本文共 1952 字,大约阅读时间需要 6 分钟。
MySQL的Range分区是实用的数据组织方式,可有效提升查询性能。本文详细解析Range分区的使用方法。
Range分区主要按特定字段的取值范围划分数据。常见的用途是按时间维度(如月份、年份)或空间维度(如地区编码)对数据进行组织。
year()、to_days、to_seconds
或unix_timestamp()
,其他函数不支持。创建员工表,按门店ID分区:
CREATE TABLE employees ( id INT NOT NULL AUTO_INCREMENT, ename VARCHAR(30) NOT NULL, ecode VARCHAR(30) NOT NULL, store_id INT NOT NULL DEFAULT 0, create_time DATETIME DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工表'PARTITION BY RANGE (store_id) ( PARTITION p0 VALUES LESS THAN (11), PARTITION p1 VALUES LESS THAN (21), PARTITION p2 VALUES LESS THAN (31), PARTITION p3 VALUES LESS THAN (41));
使用MAXVALUE时,请勿遗漏。
按创建时间的年份分区:
CREATE TABLE employees ( id INT NOT NULL AUTO_INCREMENT, ename VARCHAR(30) NOT NULL, ecode VARCHAR(30) NOT NULL, store_id INT NOT NULL DEFAULT 0, create_time DATETIME NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工表'PARTITION BY RANGE (YEAR(create_time)) ( PARTITION p0 VALUES LESS THAN (2017), PARTITION p1 VALUES LESS THAN (2018), PARTITION p2 VALUES LESS THAN (2019), PARTITION p3 VALUES LESS THAN (2020));
当存在MAXVALUE时,必须重置分区。删除分区时可能会删除数据,请谨慎操作:
ALTER TABLE employees ADD PARTITION p4 VALUES LESS THAN (51), ADD PARTITION p5 VALUES LESS THAN (61);
合并多个分区:
ALTER TABLE employees REORGANIZE PARTITION p0,p1,p2,p3 INTO ( PARTITION p1 VALUES LESS THAN (21), PARTITION p2 VALUES LESS THAN (31), PARTITION p3 VALUES LESS THAN (41), PARTITION p4 VALUES LESS THAN (51), PARTITION p5 VALUES LESS THAN (61) );
合并后不再有p0分区。
谨慎进行分区删除:
ALTER TABLE employees DROP PARTITION p4;
彻底移除表的分区:
ALTER TABLE employees REMOVE PARTITIONing;
Range分区为优化查询性能提供了权威工具,您的DBED专家乐于助惠,为您解决分区问题。
转载地址:http://diqnz.baihongyu.com/