首页/数据/SQL 速查/分区裁剪:让查询只扫目标分区
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条变更与事务52 条
性能与执行计划72 条

分区裁剪:让查询只扫目标分区

按分区键的常量条件定位分区:EXPLAIN 中会显示裁剪结果,分区键上的函数往往阻止裁剪。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
EXPLAIN SELECT * FROM logs
WHERE dt >= '2024-01-01' AND dt < '2024-02-01';
-- partitions 列显示仅命中 2024 年 1 月分区

-- 注意:对分区键使用函数可能无法裁剪
EXPLAIN SELECT * FROM logs WHERE YEAR(dt) = 2024;

PostgreSQL

PostgreSQL
EXPLAIN SELECT * FROM logs
WHERE dt >= DATE '2024-01-01' AND dt < DATE '2024-02-01';
-- Append 节点下只列出存活分区(enable_partition_pruning 默认开启)
裁剪条件分区键上的常量或可推导条件;无法裁剪时会扫描全部分区
函数阻止对分区键做函数运算通常无法裁剪,改写为范围条件
收益扫描量随裁剪下降,也便于按分区归档与维护

易错点

  • 对分区键使用函数:裁剪失效退化为全分区扫描,改成范围条件
  • 分区数过多:元数据与打开文件开销上升,分区粒度按数据量与归档周期设计

数据来源与参考

  • MySQL 8.0 Reference Manual · Partition Pruning
  • PostgreSQL Documentation · Partition Pruning
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌