zoukankan      html  css  js  c++  java
  • 分区索引(二)--本地分区索引

    本地分区索引

           可以使用与表相同的分区键和范围界限来对本地索引分区。每个本地索引的分区只包含了它所关联的表分区的键和ROWID本地索引可以是B树或位图索引。如果是B树索引,它可以是唯一或不唯一的索引。

            这种类型的索引支持分区独立性,这就意味着对于单独的分区,可以进行增加、截取、删除、分割、脱机等处理,而不用同时删除或重建索引。Oracle自动维护这些本地索引本地索引分区还可以被单独重建,而其他分区不会受到影响。

     

    1有前缀的索引

           有前缀的索引包含了来自分区键的键,并把它们作为索引的前导。例如,让我们再次回顾participant表。在创建该表后,使用survey_idsurvey_date这两个列进行范围分区,然后在survey_id列上建立一个有前缀的本地索引,如下图所示。这个索引的所有分区都被等价划分,就是说索引的分区都使用表的相同范围界限来创建。

     

           技巧本地的有前缀索引可以让Oracle快速剔除一些不必要的分区。也就是说没有包含WHERE条件子句中任何值的分区将不会被访问,这样也提高了语句的性能。

     

    2无前缀的索引

           无前缀的索引并没有把分区键的前导列作为索引的前导列。若使用有同样分区键(survey_idsurvey_date)的相同分区表,建立在survey_date列上的索引就是一个本地的无前缀索引,如下图所示。可以在表的任一列上创建本地无前缀索引,但索引的每个分区只包含表的相应分区的键值。

     

           如果要把无前缀的索引设为唯一索引,这个索引就必须包含分区键的子集。在这个例子中,我们必须把包含survey ()survey_id 的列进行组合(只要survey_id不是索引的第一列,它就是一个有前缀的索引)

     

    技巧:对于一个唯一的无前缀索引,它必须包含分区键的子集。

     

    3)注意事项:

    1)局部索引一定是分区索引,分区键等同于表的分区键。

    2)前缀和非前缀索引都可以支持索引分区消除,前提是查询的条件中包含索引分区键。

    3)局部索引只支持分区内的唯一性,无法支持表上的唯一性,因此如果要用局部索引去给表做唯一性约束,则约束中必须要包括分区键列。

    4)局部分区索引是对单个分区的,每个分区索引只指向一个表分区;全局索引则不然,一个分区索引能指向n个表分区,同时,一个表分区,也可能指向n个索引分区,对分区表中的某个分区做truncate 或者moveshrink等,可能会影响到n个全局索引分区,正因为这点,局部分区索引具有更高的可用性。

    5)位图索引必须是局部分区索引。

    6)局部索引多应用于数据仓库环境中。

     

    4示例

    sql> create index ix_custaddr_local_id on custaddr(id) local;

    索引已创建。

     

    和下面SQL 效果相同,因为local索引就是分区索引:

    create index ix_custaddr_local_id_p on custaddr(id)

    local (   

      partition t_list556 tablespace icd_service,   

      partition p_other tablespace icd_service

    )       

     

    SQL> create index ix_custaddr_local_areacode on custaddr(areacode) local;

    索引已创建。

     

    验证2个索引的类型:

    SQL>  select  index_name,table_name,partitioning_type,locality,ALIGNMENT  from

    user_part_indexes where table_name='CUSTADDR';

     

    index_name                                table_name partition locali alignment

    ------------------------------ ---------- --------- ------ ------------

    ix_custaddr_local_areacode         custaddr      list            local    prefixed

    ix_custaddr_local_id               custaddr      list            local    non_prefixed

     

      因为我们的custaddr 表是按areacode ix_custaddr_local_areacode 是有前缀的索引prefixed。而 ix_custaddr_local_id是非前缀索引。

  • 相关阅读:
    Redis5.x五种数据类型常见命令
    Redis5.x安装以及常见数据类型
    《Redis5.x入门教程》正式推出
    PPT制作套路指南
    如何更优雅地对接第三方API
    软件开发要质量还是要效率?
    前后端分离对于开发人员的挑战
    Spring中老生常谈的FactoryBean
    消费端如何保证消息队列MQ的有序消费
    《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步
  • 原文地址:https://www.cnblogs.com/james1207/p/3278195.html
Copyright © 2011-2022 走看看