You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL RANGE columns多列范围分区数据插入分区不符异常求助

MySQL分区异常原因分析

核心问题是你对RANGE COLUMNS多列分区的比较规则理解有误,MySQL的多列RANGE COLUMNS分区采用逐列优先匹配规则,而非先匹配首列等值再比较次列。

具体规则逻辑

判断数据所属分区时,会按分区声明的列顺序逐列比较:

  • 若待插入数据的当前列值 小于 分区上界的对应列值,直接判定数据满足该分区的LESS THAN条件,不再比较后续列
  • 只有当待插入数据的当前列值 等于 分区上界的对应列值时,才会继续比较下一列的大小

对应你的场景验证

你插入的数据为(c_id=1, created='2021-10-24 18:16:08'),两个分区的上界首列值都是2:

  1. 优先比较c_id,1 < 2,直接满足第一个分区logs_1_2020的VALUES LESS THAN (2,'2021-01-01 00:00:00')条件
  2. 不会再比较created字段的大小,所以数据直接落入logs_1_2020分区,而非你预期的logs_1_2021。

修复方案参考

如果你要实现c_id相同的场景下按created年份分区,需要调整分区上界的首列值匹配你要拆分的c_id,示例:

PARTITION BY RANGE columns (c_id,created)(
    -- c_id=1的按年分区
    PARTITION logs_1_2020 VALUES LESS THAN  (1,'2021-01-01 00:00:00'),
    PARTITION logs_1_2021 VALUES LESS THAN  (1,'2022-01-01 00:00:00'),
    -- c_id=2的按年分区
    PARTITION logs_2_2020 VALUES LESS THAN  (2,'2021-01-01 00:00:00'),
    PARTITION logs_2_2021 VALUES LESS THAN  (2,'2022-01-01 00:00:00')
);

内容的提问来源于stack exchange,提问作者es code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:54:02