mysql 分区裁剪的困惑

本文讨论了分区表查询中遇到的问题,特别是当查询条件跨月时只扫描第一个分区的情况。介绍了两种处理方法:添加分区和使用truncate操作替代删除分区。

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

最近发现分区表查询当查询条件跨月时总是扫描第一个分区


分区p7中保存的是2月份的数据,本部应该被选择,原因网上看了一些,有待测试


暂行处理方法

1:添加分区号小于7的分区,行不通

2:每次数据归档后不再删除分区,改为truncate,alter table xx truncate partition p1,p2;


需要实现按 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、付费专栏及课程。

余额充值