数据库分区表的索引实际上包含本地索引和全局索引两种类型

分区表的索引实际上包含本地索引和全局索引两种类型,两者结构不同、适用场景也不同。

分区表索引的两种类型

本地索引(Local Index)
  • 结构 :每个分区各自维护一棵独立的索引树,父表本身没有索引
  • 本质:N 个分区 = N 棵独立的索引树
  • 查询时:必须先通过分区裁剪定位到具体分区,再在该分区的索引中查找
全局索引(Global Index)
  • 结构 :整个父表共享一棵索引树,所有分区的数据都挂在这棵树上
  • 本质:不管有多少个分区,索引只有一棵
  • 查询时:直接走这棵全局索引树,无需关心数据在哪个分区

结构对比图解

复制代码
本地索引(每个分区独立一棵树):
  父表 orders
    ├── 分区 p202401 → 索引树 [order_date索引]
    ├── 分区 p202402 → 索引树 [order_date索引]
    └── 分区 p202403 → 索引树 [order_date索引]

全局索引(所有分区共享一棵树):
  父表 orders
    ├── 分区 p202401 ─┐
    ├── 分区 p202402 ─┼──→ 一棵全局索引树 [order_id索引]
    └── 分区 p202403 ─┘

关键区别

维度 本地索引 全局索引
索引数量 每个分区各一棵 整个表只有一棵
查询是否必须带分区键 是,否则无法裁剪分区 否,任意字段都能高效查
增删分区时 只影响对应分区,零额外开销 可能导致整棵索引失效需重建
典型场景 按时间/地区等分区键过滤 按非分区键(如订单号)点查

一句话总结

本地索引是"每个分区各管各的索引",全局索引是"所有分区共用一棵索引树"。分区表的索引策略通常是两者结合使用,而不是只选其中一种。


相关推荐
SelectDB3 小时前
SelectDB 是哪个公司的?是国产数据库吗?一篇讲清飞轮科技与 Apache Doris 的关系
数据库
这个DBA有点耶3 小时前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返
数据库·人工智能·sql
这个DBA有点耶5 小时前
函数索引的“完全一致”有多苛刻:写法、字符集、类型,差一处就失效
数据库·mysql·代码规范
星恒随风5 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
Alluxio6 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
数据库急诊室_阿哲10 小时前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
青瓦梦滋10 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
慧都小妮子11 小时前
Wyn商业智能国产数据库适配:数据接入、分析缓存与审计日志验证清单
数据库·数据分析·数据可视化·审计日志·商业智能
Joy T12 小时前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
杨凯凡12 小时前
MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战
数据库·spring boot·mysql