[Oracle]分区索引
上一节学习了分区表,接着学习分区索引。
(一)什么时候对索引进行分区
· 为了避免移动数据时重建整个索引,可对索引分区,在重建索引时,只需重建与数据分区相关的索引;
· 在对分区表进行维护时,为了避免整个表的索引处于不可用状态,可将索引进行分区。当对分区表进行维护时,只需将该分区表的索引置为不可用状态,并不会影响到其它分区索引的使用;
· 索引表的急剧增长导致索引条目的剧增,使得整个索引表非常大,影响索引速度,需要对索引分区;
(二)本地分区索引
(1)本地分区索引是为分区表中的各个分区创建单独的索引分区,各个索引分区之间是相互独立的,索引的分区与表的分区是一一对应的,一个分区表有几个分区,就有几个本地分区索引。当对本地分区表进行分区的添加、删除、合并等操作时,系统会自动对分区索引进行维护,创建本地分区索引需要使用LOCAL关键字。
图.分区表与本地分区索引一一对应
(2)本地分区索引的优点:
l 如果需要对一个表分区进行维护,则受影响的只是与之关联的索引;
l 重建某个索引分区,其它分区不会受到影响;
l 本地分区索引支持单一分区数据的装入和卸出;
l 本地分区索引采用与分区表相同的分区方法,有利于生成高效的查询计划;
l 本地分区索引简化了表空间的不完全恢复,在恢复分区/子分区的时候同时恢复对应的分区索引。
(3)为分区表创建本地分区索引
1 | CREATE INDEX index_name ON partition_table_name( column ) LOCAL ; |
例子1.为sales_by_list创建分区索引sales_by_index
1 | CREATE INDEX sales_by_index ON sales_by_list(province) |
结果如下:
(三)全局分区索引
(1)全局分区索引是对整个表建立索引,然后再对索引进行分区。索引的分区之间不是相互独立的,索引分区与表分区也不是一一对应的关系。Oracle全局分区索引分区方法包括范围分区(Range)和散列分区(Hash),全局分区需要使用GLOBAL关键字。
图.全局索引的4种情况
(2)为分区表创建全局分区索引,主要有2步:创建全局索引和对全局索引进行分区,语法为:
1 2 3 4 5 6 | CREATE INDEX index_name ON [partition]_table_name( column ) --创建全局索引 GLOBAL PARTITION BY Range( column ) --以Range方式为例,对索引表进行分区 ( PARTITION partition VALUES LESS THAN() TABLESPACE tablespace, … ); |
例子2.为sale_by_range创建全局分区索引
1 2 3 4 5 6 7 8 9 | /*为sales_by_range表创建全局分区索引*/ create index sale_by_range_index on sale_by_range(time_id) global partition by range(time_id) ( partition sales_by_range_index_1 values less than(to_date( '2012-1-1' , 'yyyy-mm-dd' )), partition sales_by_range_index_2 values less than(to_date( '2012-4-5' , 'yyyy-mm-dd' )), partition sales_by_range_index_3 values less than(maxvalue) ); |
结果如下:
(4)维护分区索引
使用ALTER INDEX语句来维护索引分区
(四)查看分区索引的信息
Oracle提供了数据字典来查看分区索引的信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?