浅谈索引系列之本地索引与全局索引
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,分区表按照类型可以分为范围分区(Range)、列表分区(List)以及哈希分区(Hash),表被分区后,其对应的索引也会与普通表的索引有所不同。基本概念对于分区表上的索引可以分为两类:本地索引和全局索
千家信息网最后更新 2026年10月31日浅谈索引系列之本地索引与全局索引

本文重点说明Local Partitioned Index(为配合上图此处才这么写,可以简写为Local Index,因为Local Index一定是分区的)和Global Partitioned Index的基本概念原理以及其对应使用的场景。
本地索引的分区机制与表的分区机制一样:其分区键与分区表的分区键相同,同样分区个数与基表分区个数也相同,因此本地索引分区情况与基表一模一样。
全局分区索引分区键以及分区个数与基表可能不同,另外全局分区索引必须为前缀索引,即其索引分区键必须为索引的前几列。
用文字描述比较枯燥,难于理解,下图比较形象的说明了两者以及两者的区别。
Local Index global Partition Index

1. 新建测试以ID为分区键的范围分区表T_PARTITION,具体表结构如下:
desc t_partition;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
DATA VARCHAR2(100)
本地索引:
分为两种情况比较,一种情况查询谓词中带有基表的分区键,另外一种不带基表分区键,先看条件不带分区键的情况:
本地索引:
全局索引:
通过上面两个图输出的统计信息,可以看到逻辑读(consistent gets)全局索引明显要比本地索引逻辑读少,全局索引的效率更高。
下面再观察一下谓词中带有分区键的情况:
本地索引:
全局索引:
相差不大,相对来说本地索引性能比全局索引性能更好一下。
全局索引和本地索引各自有各自的特点,使用场景不同,DBA应根据具体的业务情况创建相应的索引,另外从Oracle官方可以找到关于本地索引和全局索引的一点点建议:
由此推断:全局索引多用于OLTP系统,而本地索引都用于OLAP系统。
2.只要查询条件中包含了基表的分区键,非前缀、前缀索引都支持分区消除。
3.本地索引由Oracle自动管理,当有添加、删除、合并分区、截断分区数据等操作,本地索引自动更新,但全局索引不会自动更新,一旦有上述操作请记得添加update global indexes语句,若不添加索引就会变得不可用。
本地索引:
全局索引:
可以看到若不添加update global indexes,全局索引状态会变为不可用,因此在日常维护全局索引过程中请注意此问题。
分区表按照类型可以分为范围分区(Range)、列表分区(List)以及哈希分区(Hash),表被分区后,其对应的索引也会与普通表的索引有所不同。
基本概念
对于分区表上的索引可以分为两类:本地索引和全局索引。其中全局索引又可以分为分区索引和未分区索引,而本地索引必须为分区索引。因此若某个索引未分区,可以直接断定其为全局索引;若已分区,在根据具体情况进行判断。官方截图如下:
本文重点说明Local Partitioned Index(为配合上图此处才这么写,可以简写为Local Index,因为Local Index一定是分区的)和Global Partitioned Index的基本概念原理以及其对应使用的场景。
本地索引的分区机制与表的分区机制一样:其分区键与分区表的分区键相同,同样分区个数与基表分区个数也相同,因此本地索引分区情况与基表一模一样。
全局分区索引分区键以及分区个数与基表可能不同,另外全局分区索引必须为前缀索引,即其索引分区键必须为索引的前几列。
用文字描述比较枯燥,难于理解,下图比较形象的说明了两者以及两者的区别。
Local Index global Partition Index

应用场景
那么本地索引和全局分区索引或全局索引究竟适用于什么场景呢?,下面以本地索引和全局索引(非分区)为例进行说明:1. 新建测试以ID为分区键的范围分区表T_PARTITION,具体表结构如下:
desc t_partition;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
DATA VARCHAR2(100)
点击(此处)折叠或打开
- SQL> SELECT count(*) FROM user_tab_partitions WHERE table_name='T_PARTITION';
COUNT(*)
----------
1000
点击(此处)折叠或打开
- SQL> SELECT count(*) FROM t_partition;
- COUNT(*)
- ----------
- 11030039
本地索引:
点击(此处)折叠或打开
- create index ind_l_data on t_partition(data) local;
- Index created.
点击(此处)折叠或打开
- SELECT table_name,locality,alignment FROM user_part_indexes WHERE index_name='IND_L_DATA';
- TABLE_NAME LOCALITY ALIGNMENT
- ---------------- ----------- ------------
- T_PARTITION LOCAL NON_PREFIXED
- SELECT count(*) FROM user_ind_partitions t WHERE index_name='IND_L_DATA';
COUNT(*)
----------
1000
点击(此处)折叠或打开
- drop index ind_l_data;
- create index ind_g_data on test_partition(data);
- Index created.
分为两种情况比较,一种情况查询谓词中带有基表的分区键,另外一种不带基表分区键,先看条件不带分区键的情况:
本地索引:
全局索引:
通过上面两个图输出的统计信息,可以看到逻辑读(consistent gets)全局索引明显要比本地索引逻辑读少,全局索引的效率更高。
下面再观察一下谓词中带有分区键的情况:
本地索引:
全局索引:
相差不大,相对来说本地索引性能比全局索引性能更好一下。
全局索引和本地索引各自有各自的特点,使用场景不同,DBA应根据具体的业务情况创建相应的索引,另外从Oracle官方可以找到关于本地索引和全局索引的一点点建议:
由此推断:全局索引多用于OLTP系统,而本地索引都用于OLAP系统。
维护注意事项
1.本地索引可以为前缀索引和非前缀索引,全局索引必须为前缀索引。如下我们全局索引创建在data列,通过id列分区,系统报错GLOBAL partitioned index must be prefixed.2.只要查询条件中包含了基表的分区键,非前缀、前缀索引都支持分区消除。
3.本地索引由Oracle自动管理,当有添加、删除、合并分区、截断分区数据等操作,本地索引自动更新,但全局索引不会自动更新,一旦有上述操作请记得添加update global indexes语句,若不添加索引就会变得不可用。
本地索引:
全局索引:
可以看到若不添加update global indexes,全局索引状态会变为不可用,因此在日常维护全局索引过程中请注意此问题。
索引
全局
情况
前缀
场景
分区表
不同
个数
系统
相同
官方
性能
数据
机制
条件
概念
范围
语句
谓词
逻辑
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
瑰夏咖啡
互联网科技公司起名
互联网科技有限公司经营范围
鸠鸠互联网科技
港股互联网科技股
奇酷互联网科技公司
碳银互联网科技
互联网 视角下的科技创新
互联网科技咨询
滨湖区互联网智能科技产品供应
博兴的互联网电子科技公司
南平创想时代互联网科技有限公司
哈尔滨屹滨互联网科技有限公司
如何创新互联网科技
广州有谷有贝互联网科技有限公司
云鲸互联网络科技有限公司
唯美互联网科技
北京互联网科技类企业分布
互联网科技创新创业项目
现代科技的标志之一的互联网
北京禾田雨橡互联网科技
甘肃拓世互联网科技有限公司
深圳卡尔迅互联网科技有限公司怎么样
互联网企业和科技型企业
宁夏科技产业互联网案例
科技类公司包括互联网吗
深圳市罗太互联网科技有限公司
互联网在线教育科技创业
北京市互联网新科技
第三届互联网大会安防黑科技