Range算法
适用场景
适用于范围类操作较多的场景。在SQL查询条件中,使用“>”、“<”、“BETWEEN ... AND ...”之类运算符相对较多。
使用说明
拆分键的类型只支持整型类型、日期类型和日期函数结合,若使用日期函数,拆分键的数据类型必须是date、datetime、timestamp其一。
拆分键为表字段或表字段+日期函数。若拆分键为表字段+日期函数,其中数据表字段必须是日期类型(DATE / DATETIME / TIMESTAMP),日期函数适用于需要按时间(年、月、日、周及其组合)对数据进行拆分的场景。
路由方式
根据拆分键,按照算法元数据的规则将数据行存储到相应的分片上。
算法计算方式
方式一:拆分键是整型
条件 |
计算方式 |
举例 |
---|---|---|
拆分键是整型 |
分库路由结果 = 根据分库拆分键值在设定的元数据的范围进行路由 分表路由结果 = 根据分表拆分键值在设定的元数据的范围进行路由 |
分库 :拆分值为3属于3-4=1,则路由到1分片 分表:拆分值为5属于5-6=2,则路由到2分片 |
方式二:拆分键是日期类型
日期函数 |
计算方式 |
举例 |
---|---|---|
year() |
year(yyyy-MM-dd)=yyyy |
year(‘2019-10-11’)=2019 |
month() |
month(yyyy-MM-dd)=MM |
month(‘2019-10-11’)=10 |
weekofyear() |
weekofyear(yyyy-MM-dd)=该日期是今年的第几周 |
weekofyear (‘2019-10-11’)=41 |
day() |
day(yyyy-MM-dd)=该日期是月份的第几天 |
day (‘2019-10-11’)=11 |
条件 |
算法 |
举例 |
---|---|---|
拆分键是日期类型 |
分库路由结果 =根据日期函数(分库拆分键值)在设定的元数据的范围进行路由 分表路由结果 =根据日期函数(分表拆分键值)在设定的元数据的范围进行路由 |
分库/分表 :month(2019-10-11)=10属于9-10=4,则路由到4分片 |
建表语法
create table range_tb( id int, name varchar(30) DEFAULT NULL, create_time datetime DEFAULT NULL, primary key(id) ) dbpartition by range(id) { 1-2=0, 3-4=1, 5-6=2, 7-8=3, 9-10=4, 11-12=5, 13-14=6, default=7 };
注意事项
- 拆分键和键值皆不能修改。
- range可以作为分库算法,不能作为分表算法。