首页 > 数据库 > SQL > 正文

SQL按范围分区详细说明_SQL RANGE分区示例

舞姬之光
发布: 2025-12-04 20:44:02
原创
934人浏览过
RANGE分区是按列值连续范围将表划分为多个分区,适用于时间或数字字段;要求分区列类型为数值或日期、范围不重叠且连续覆盖,插入时自动路由至匹配分区。

sql按范围分区详细说明_sql range分区示例

SQL的RANGE分区是按列值的连续范围将表数据划分为多个分区,每个分区对应一个值区间,常用于时间字段(如日期)或数字主键的归档与查询优化。

什么是RANGE分区

RANGE分区要求分区列必须是数值型或日期型,且各分区范围不能重叠、必须连续覆盖(或明确指定MAXVALUE作为兜底)。MySQL、PostgreSQL(通过表继承模拟)、Oracle等主流数据库均支持,但语法细节略有差异。核心逻辑是:当插入一条记录时,数据库根据分区列的值自动将其路由到匹配的分区中。

RANGE分区的关键规则

必须满足以下条件:

  • 分区列不能为NULL(除非显式允许并单独定义NULL分区)
  • 每个分区需用VALUES LESS THAN定义上界,例如VALUES LESS THAN (20230101)
  • 分区边界必须严格递增,不可跳过或倒序
  • 最后一个分区建议用VALUES LESS THAN MAXVALUE,避免插入越界报错
  • 不支持对已有非分区表直接添加RANGE分区,需重建表或使用ALTER TABLE ... PARTITION BY

MySQL RANGE分区完整示例

以订单表orders为例,按订单创建时间(order_date)做月度分区:

风车Ai翻译
风车Ai翻译

跨境电商必备AI翻译工具

风车Ai翻译 360
查看详情 风车Ai翻译
CREATE TABLE orders (
  id BIGINT PRIMARY KEY,
  order_no VARCHAR(32),
  amount DECIMAL(10,2),
  order_date DATE
) PARTITION BY RANGE (YEAR(order_date) * 100 + MONTH(order_date)) (
  PARTITION p_202301 VALUES LESS THAN (202302),
  PARTITION p_202302 VALUES LESS THAN (202303),
  PARTITION p_202303 VALUES LESS THAN (202304),
  PARTITION p_202304 VALUES LESS THAN (202305),
  PARTITION p_future VALUES LESS THAN MAXVALUE
);
登录后复制

说明:这里用YEAR(date)*100+MONTH(date)生成形如202301的整数,便于RANGE分区;查询WHERE order_date BETWEEN '2023-02-01' AND '2023-02-28'时,优化器可自动裁剪到p_202302分区,大幅减少扫描量。

常见问题与注意事项

容易踩的坑:

  • 误用字符串函数(如DATE_FORMAT)导致无法分区——RANGE只接受确定性表达式,且必须返回数值或日期
  • 忘记建索引:分区本身不替代索引,order_date仍建议加普通索引或前缀索引
  • 分区过多(如每天一分区)会增加元数据开销,一般按月或季度更合理
  • 删除历史分区可用ALTER TABLE orders DROP PARTITION p_202301,比DELETE更快且不锁全表

基本上就这些。RANGE分区不是万能的,但对时间序列类大表的冷热分离和快速归档非常实用。

以上就是SQL按范围分区详细说明_SQL RANGE分区示例的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号