如何在不使用PARTITION关键字的情况下获取分区数据
无需PARTITION关键字查询MariaDB 5.5分区数据的方法
针对MariaDB 5.5.60不支持PARTITION()查询语法的问题,你可以利用分区的RANGE定义规则,通过WHERE条件精准筛选对应分区的数据,具体方法如下:
核心思路
你的表是基于UNIX_TIMESTAMP(start_time)做RANGE分区的,每个分区都有明确的数值范围边界。直接在查询中匹配这些边界条件,数据库优化器会自动定位到目标分区,效果与指定PARTITION关键字一致。
具体操作
1. 查询指定分区(如p20220810)
根据分区定义,p20220810的范围是大于等于上一个分区的上限值,且小于自身的上限值:
SELECT COUNT(*) FROM db.table1 WHERE UNIX_TIMESTAMP(start_time) >= 1660069800 -- p20220809的LESS THAN值 AND UNIX_TIMESTAMP(start_time) < 1660156200; -- p20220810的LESS THAN值
2. 查询最大分区(p_max_future_dates)
该分区包含所有大于等于最后一个普通分区上限的数据:
SELECT COUNT(*) FROM db.table1 WHERE UNIX_TIMESTAMP(start_time) >= 1660156200;
补充说明
- MariaDB 5.5确实未引入
FROM ... PARTITION()的查询语法,但分区的核心功能(数据按范围存储、自动路由)是正常工作的,通过WHERE条件匹配范围即可实现分区数据的查询。 - 这种方式不会产生额外性能开销,优化器会根据分区规则直接扫描目标分区,而非全表扫描。
内容的提问来源于stack exchange,提问作者ShEi
相关产品推荐
相关产品推荐

