Oracle创建索引分区

索引分区分为:本地(局部)索引(local index)和全局索引(global index)
一.本地索引
    1.普通索引

CREATE INDEX INDEX_NAME ON TABLE (COLUMN)
local
(
partition part_idx_01 tablespace index_space01,
partition part_idx_02 tablespace index_space02,
partition part_idx_03 tablespace index_space03
)

    2.唯一索引 如:主键

CREATE UNIQUE INDEX INDEX_NAME ON TABLE (COLUMN)
local
(
partition part_idx_01 tablespace index_space01,
partition part_idx_02 tablespace index_space02,
partition part_idx_03 tablespace index_space03
)

    注:主键索引和主键约束的创建与删除顺序
    创建主键索引 --> 创建主键约束
    删除主键约束 --> 删除主键索引
    3.非表分区字段唯一索引 表分区字段:USRID

CREATE UNIQUE INDEX INDEX_NAME ON TABLE (COLUMN,USRID)
local
(
partition part_idx_01 tablespace index_space01,
partition part_idx_02 tablespace index_space02,
partition part_idx_03 tablespace index_space03
)


二.全局索引
    1.范围索引

CREATE [UNIQUE] INDEX INDEX_NAME ON TABLE(COLUMN)
global partition by range(column)
(
partition part_idx_01 value less than(first range value) tablespace index_space01,
partition part_idx_02 value less than(second range value) tablespace index_space02,
partition part_idx_03 value less than(maxvalue) tablespace index_space03
)

    2.散列索引

CREATE [UNIQUE] INDEX INDEX_NAME ON TABLE(COLUMN,[COLUMN2])
global partition by hash(column,[column2])
(
partition part_idx_01 tablespace index_space01,
partition part_idx_02 tablespace index_space02,
partition part_idx_03 tablespace index_space03
)

    注:
    a.分区字段不是主键的情况下,只可以创建全局分区索引,不可以创建本地主键分区索引。只有分区字段为主键时才可以创建本地主键分区索引。

    b.如果创建本地唯一分区索引,除指定索引字段外还要加上表分区字段。这种索引意义不大:因为这样构成复合索引,索引改变,约束也改变了。

    c.如果创建非唯一索引则不需要表分区字段。
    d.创建全局分区索引后可以创建约束。

 

三.查看索引分区信息
    1.DBA查看索引分区

select * from dba_ind_partitions

    2.USER查看索引分区

select * from user_ind_partitions

    3.DBA查看索引分区类型

select * from dba_part_indexes

    4.USER查看索引分区类型

select * from user_part_indexes
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle中,为分区创建索引与为非分区创建索引基本相同,只需要在创建索引时指定分区表的分区键即可。 下面是一个示例: ``` CREATE TABLE my_partitioned_table ( id NUMBER(10) NOT NULL, created_at TIMESTAMP(6) NOT NULL, some_data VARCHAR2(100), CONSTRAINT pk_my_partitioned_table PRIMARY KEY (id, created_at) ) PARTITION BY RANGE (created_at) ( PARTITION p1 VALUES LESS THAN (TO_DATE('2018-01-01', 'YYYY-MM-DD')), PARTITION p2 VALUES LESS THAN (TO_DATE('2019-01-01', 'YYYY-MM-DD')), PARTITION p3 VALUES LESS THAN (MAXVALUE) ); CREATE INDEX idx_my_partitioned_table ON my_partitioned_table(created_at, some_data) GLOBAL PARTITION BY RANGE (created_at) ( PARTITION p1 VALUES LESS THAN (TO_DATE('2018-01-01', 'YYYY-MM-DD')), PARTITION p2 VALUES LESS THAN (TO_DATE('2019-01-01', 'YYYY-MM-DD')), PARTITION p3 VALUES LESS THAN (MAXVALUE) ); ``` 在这个示例中,我们创建了一个名为 `my_partitioned_table` 的分区表,它根据 `created_at` 列的值进行分区。然后,我们为该表创建了一个名为 `idx_my_partitioned_table` 的索引,该索引也根据 `created_at` 列的值进行分区。 注意,我们在创建索引时使用了 `GLOBAL PARTITION BY RANGE` 语句,这是因为我们想要为每个分区创建一个单独的索引分区,以便能够更好地利用分区表的性能优势。 需要注意的是,在为分区创建索引时,我们必须指定每个分区索引分区。如果我们不这样做,Oracle将自动为我们创建一个全局索引分区,这会导致性能问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值