使用partition建立RANGE类型按TO_DAYS划分的表分区

本文介绍了MySQL数据库中使用RANGE分区的具体方法,通过实例演示了如何根据sale_date字段创建分区,并解释了TO_DAYS函数在确定分区边界时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql中对数据表有RANGE,LIST,HASH,KEY四种类型的分区方式。下面为按照RANGE进行分区的方式:

create table sales2 ( id NUMERIC,sale_date datetime not null)
PARTITION by range(TO_DAYS(sale_date))
(
   PARTITION sales20140301 values less than(TO_DAYS('2014-03-01')),
   PARTITION sales20140401 values less than(TO_DAYS('2014-04-01'))
)


TO_DAYS('2014-03-01') 时间并不包括当前的时间,而是此前的日期。



需要实现按 device_id 做64HASH 分区,再按positionTime时间做每7天一个子分区,首次创建表时先建 10 个 7 天级子分区,后续由事件自动维护每 7 天检查一次,若未来不足 10 个子分区,则一次性补齐 10 个,分析以下代码是否有语法错误,并修改: CREATE TABLE device_trajectory ( tid VARCHAR(50) NOT NULL, device_id VARCHAR(50) NOT NULL, latitude DECIMAL(10,6) NOT NULL, -- 约 16 cm 精度[^1^] longitude DECIMAL(10,6) NOT NULL, deviceAlarm VARCHAR(50), deviceAltitude DECIMAL(10,2), deviceSpeed DECIMAL(10,2), deviceDirection DECIMAL(10,2), deviceStatus TINYINT, positionTime DATETIME NOT NULL, createTime DATETIME NOT NULL, deviceDistance DECIMAL(12,2), recorderSpeed DECIMAL(10,2), remainingFuel DECIMAL(8,2), alarmConfirm TINYINT, overSpeed TINYINT, inOutArea TINYINT, travelTime INT, singleStatus VARCHAR(10), ioStatus VARCHAR(20), analogQuantity DECIMAL(10,2), networkSignalStrength TINYINT, gnssSatelliteNumber TINYINT, mainPowerVoltage DECIMAL(5,2), simIccid VARCHAR(25), -- 联合主键,便于分区裁剪 PRIMARY KEY (device_id, positionTime), -- 常用检索列索引 INDEX idx_tid (tid), INDEX idx_alarm (deviceAlarm), INDEX idx_createTime (createTime) ) PARTITION BY HASH (device_id) SUBPARTITION BY RANGE (TO_DAYS(positionTime)) ( -- 先建 10 个 7 天级子分区,后续由事件自动维护 SUBPARTITION p20240802 VALUES LESS THAN (TO_DAYS('2025-08-09')), SUBPARTITION p20240809 VALUES LESS THAN (TO_DAYS('2025-08-16')), SUBPARTITION p20240816 VALUES LESS THAN (TO_DAYS('2025-08-23')), SUBPARTITION p20240823 VALUES LESS THAN (TO_DAYS('2025-08-30')), SUBPARTITION p20240830 VALUES LESS THAN (TO_DAYS('2025-09-06')), SUBPARTITION p20240906 VALUES LESS THAN (TO_DAYS('2025-09-13')), SUBPARTITION p20240913 VALUES LESS THAN (TO_DAYS('2025-09-20')), SUBPARTITION p20240920 VALUES LESS THAN (TO_DAYS('2025-09-27')), SUBPARTITION p20240927 VALUES LESS THAN (TO_DAYS('2025-10-04')), SUBPARTITION p20241004 VALUES LESS THAN (TO_DAYS('2025-10-11')) );
最新发布
08-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值