global index & local index的区别

本文详细介绍了Oracle数据库中分区表的两种索引类型:局部索引和全局索引。包括它们的特点、适用场景及如何进行索引重建。适用于数据仓库环境的局部索引和适用于OLTP系统的全局索引各有优势。
部署运行你感兴趣的模型镜像

表可以按range,hash,list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限性做个总结。

 
局部索引local index
 
1.        局部索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区说,一句话,局部索引的分区机制和表的分区机制一样。
2.        如果局部索引的索引列以分区键开头,则称为前缀局部索引。
3.        如果局部索引的列不是以分区键开头,或者不包含分区键列,则称为非前缀索引。
4.        前缀和非前缀索引都可以支持索引分区消除,前提是查询的条件中包含索引分区键。
5.        局部索引只支持分区内的唯一性,无法支持表上的唯一性,因此如果要用局部索引去给表做唯一性约束,则约束中必须要包括分区键列。
6.        局部分区索引是对单个分区的,每个分区索引只指向一个表分区,全局索引则不然,一个分区索引能指向n个表分区,同时,一个表分区,也可能指向n个索引分区,
          对分区表中的某个分区做truncate或者move,shrink等,可能会影响到n个全局索引分区,正因为这点,局部分区索引具有更高的可用性。
7.        位图索引只能为局部分区索引。
8.        局部索引多应用于数据仓库环境中。
 
全局索引global index
 
1.        全局索引的分区键和分区数和表的分区键和分区数可能都不相同,表和全局索引的分区机制不一样。
2.        全局索引可以分区,也可以是不分区索引,全局索引必须是前缀索引,即全局索引的索引列必须是以索引分区键作为其前几列。
3.        全局分区索引的索引条目可能指向若干个分区,因此,对于全局分区索引,即使只动,截断一个分区中的数据,都需要rebulid若干个分区甚
          至是整个索引。
4.        全局索引多应用于oltp系统中。
5.        全局分区索引只按范围或者散列hash分区,hash分区是10g以后才支持。
6.        oracle9i以后对分区表做move或者truncate的时可以用update global indexes语句来同步更新全局分区索引,用消耗一定资源来换取高度的可用性。
7.        表用a列作分区,索引用b做局部分区索引,若where条件中用b来查询,那么oracle会扫描所有的表和索引的分区,成本会比分区更高,此时可以考虑用b做全局分区索引

 
分区索引字典
 
DBA_PART_INDEXES 分区索引的概要统计信息,可以得知每个表上有哪些分区索引,分区索引的类新(local/global,)
Dba_ind_partitions每个分区索引的分区级统计信息
Dba_indexesminusdba_part_indexes,可以得到每个表上有哪些非分区索引
 
索引重建
 
Alter index idx_name rebuild partition index_partition_name [online nologging]
需要对每个分区索引做rebuild,重建的时候可以选择online(不会锁定表),或者nologging建立索引的时候不生成日志,加快速度。
Alter index rebuild idx_name [online nologging]
对非分区索引,只能整个index重建

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>好的,用户问的是“高斯库分区表主键后面可以用local index吗?”。首先,我需要确定“高斯库”指的是什么。根据之前的对话历史,用户提到的“高斯库”可能指的是高斯数据库(GaussDB),华为开发的一款关系型数据库。不过,也有可能用户指的是其他名称类似的数据库,比如PostgreSQL的某个分支或者高斯相关的开源项目。但结合常见情况,高斯数据库更可能是指华为的GaussDB。 接下来,用户的问题涉及分区表的主键和本地索引(local index)。需要理解分区表的结构以及主键和索引在其中的应用。在数据库设计中,分区表通常是将大表分成多个小分区,以提高查询性能和管理效率。主键用于唯一标识表中的每一行,而索引则是为了加速查询。 用户想知道是否可以在分区表的主键之后使用本地索引。这里的“主键后面”可能是指在创建主键之后创建本地索引,或者主键本身是否允许使用本地索引。需要明确分区表的两种索引类型:全局索引(global index)和本地索引(local index)。全局索引覆盖整个表的所有分区,而本地索引是针对每个分区单独创建的,每个分区有自己的索引。 在大多数数据库中,主键需要是全局唯一的,因此主键索引通常是全局索引。但有些数据库支持分区键作为主键的一部分,这样主键可以自动成为本地索引。例如,在Oracle中,如果主键包含分区键,则可以创建本地索引。否则,主键需要全局索引。类似地,在PostgreSQL的分区表中,主键必须包含分区键,从而每个分区的索引是本地索引。 对于华为的GaussDB,需要查阅其文档。根据GaussDB的文档,分区表的主键必须包含分区键列,这样可以确保主键的唯一性跨分区。这种情况下,主键索引实际上会成为本地索引,因为每个分区都有自己的索引。因此,用户的问题可能是在确认是否可以在这样的主键之后继续使用本地索引,或者是否允许主键本身作为本地索引。 需要进一步分析GaussDB的具体实现。如果主键必须包含分区键,并且每个分区的主键索引是本地化的,那么在这种情况下,主键本身已经是本地索引,用户可能不需要额外创建本地索引。但用户可能有其他需求,比如在非分区键列上创建本地索引,这时需要确认是否允许,以及如何操作。 另外,用户的问题可能存在一定的歧义,需要明确“主键后面”具体指什么。是否是创建主键之后,再创建本地索引?或者主键是否可以使用本地索引的类型?需要根据不同的可能性进行解答。 总结可能的解答方向: 1. 解释分区表中主键和索引的关系,特别是本地索引和全局索引的区别。 2. 说明GaussDB中分区表主键的要求,是否必须包含分区键。 3. 分析在GaussDB中,主键是否可以作为本地索引,或者是否需要全局索引。 4. 回答用户问题:是否可以在主键之后(即主键存在的情况下)创建本地索引,或者主键本身是否支持本地索引。 需要确保回答准确,并且基于GaussDB的实际支持情况。如果GaussDB允许主键作为本地索引,那么回答是肯定的,但需要满足特定条件,如主键包含分区键。否则,可能需要使用全局索引来维护主键的唯一性。 同时,要提醒用户注意主键的唯一性约束在分区表中的重要性,以及选择合适索引类型对性能的影响。例如,本地索引维护成本低,但查询可能需要跨分区时效率不高;全局索引反之。 最后,提供示例或最佳实践,帮助用户更好地理解和应用。</think>在华为**高斯数据库(GaussDB)**中,分区表的主键设计本地索引(Local Index)的使用需遵循特定的规则。以下是分步骤说明: --- ### **1. 分区表主键的限制** 在GaussDB中,**分区表的主键必须包含分区键**。 - **原因**:若主键不包含分区键,则无法保证全局唯一性(不同分区可能存在相同主键值)。 - **示例**: ```sql -- 分区表定义(范围分区) CREATE TABLE sales ( sale_id INT, sale_date DATE, region VARCHAR(20), PRIMARY KEY (sale_id, sale_date) -- 主键必须包含分区键`sale_date` ) PARTITION BY RANGE (sale_date); ``` --- ### **2. 本地索引(Local Index)的定义** - **本地索引**:针对每个分区单独创建的索引,分区数据一一绑定。 - **特点**: - 索引范围仅限于单个分区,维护成本低。 - 查询时若未指定分区键,可能需扫描所有分区的索引。 --- ### **3. 主键本地索引的关系** - **主键默认创建全局唯一索引**: 即使主键包含分区键,GaussDB仍会为分区表的主键生成**全局唯一索引**,而非本地索引。 - **是否支持主键使用本地索引?** **不支持**。主键的全局唯一性需依赖全局索引,无法直接使用本地索引。 --- ### **4. 本地索引的适用场景** 若需在分区表的非主键列上加速查询,可单独创建本地索引: ```sql -- 在分区表`sales`的`region`列上创建本地索引 CREATE INDEX local_idx_region ON sales (region) LOCAL; ``` - **优势**:维护高效,分区删除/Truncate时自动清理对应索引。 - **限制**:查询时必须指定分区键,否则需扫描全部分区索引。 --- ### **5. 全局索引 vs. 本地索引** | **特性** | **全局索引** | **本地索引** | |------------------|------------------------------|------------------------------| | **唯一性** | 全局唯一 | 仅分区内唯一 | | **维护成本** | 高(跨分区更新影响大) | 低(单分区操作) | | **查询性能** | 全表扫描快 | 需结合分区键筛选 | | **适用场景** | 高频跨分区查询 | 分区键明确的查询 | --- ### **6. 总结** - **主键必须包含分区键**,且默认使用全局索引。 - **无法直接为主键创建本地索引**,但可在其他列上创建本地索引加速查询。 - **设计建议**: - 若需主键唯一性 → 接受全局索引的开销。 - 若需高效分区内查询 → 在非主键列使用本地索引。 --- 如果需要进一步分析具体业务场景,请提供更多需求细节!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值