Oracle非分区索引,全局分区索引和本地分区索引。
1.如果按照索引是否分区作为划分依据,Oracle 的索引类型可以分为非分区索引,全局分区索引和本地分区索引。

2.创建演示实例
--创建非分区表
create table test_partition_01(
number_1 number,
number_2 number,
string_1 varchar2(10),
string_2 varchar2(20)
);
-- 写入数据
insert into test_partition_01(number_1,
number_2,
string_1,
string_2)
select dbms_random.random() as number_1,
round(dbms_random.value(0, 100000)) as number_2,
dbms_random.string(opt => 'A', len => 1) as String_1,
dbms_random.string(opt => 'p', len => 10) as String_2
from dual
connect by rownum < 100000;
commit;
--试图创建本地分区索引 报错
CREATE INDEX ix_test_partition_01_1 ON test_partition_01(number_1)
local (PARTITION p1,
PARTITION p2,
PARTITION p3);---ORA-14016
---创建普通索引
CREATE INDEX ix_test_partition_01_1 ON test_partition_01(number_1);
--创建 全局分区索引
CREATE INDEX ix_test_partition_01_2 ON test_partition_01(number_2)
GLOBAL PARTITION BY RANGE (number_2)
(PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (55000),
PARTITION p3 VALUES LESS THAN (MAXVALUE));
结论:非分区表可以创建普通索引和全局分区索引不能创建本地分区索引。
-------------------------------------------------------------------------------
create table test_partiton_02(
number_1 number,
number_2 number,
string_1 varchar2(10),
string_2 varchar2(20)
) partition by range(number_2)
(
partition p1 values less than (10000),
partition p2 values less than (20000),
partition p3 values less than (50000),
partition p4 values less than (70000),
partition p5 values less than (maxvalue)
);
--试图创建本地分区索引
CREATE INDEX ix_test_partiton_02_1 ON test_partiton_02(number_1)
local (PARTITION p1,
PARTITION p2,
PARTITION p3);--ora-14024 索引的分区数必须等于基础表的分区数
--创建本地分区索引
CREATE INDEX ix_test_partiton_02_1 ON test_partiton_02(number_1)
local (PARTITION p1,
PARTITION p2,
PARTITION p3,
PARTITION p4,
PARTITION p5
);--drop index ix_test_partiton_02_1;
CREATE INDEX ix_test_partiton_02_1 ON test_partiton_02(number_1) local; --和上面的创建方式等效 --drop index ix_test_partiton_02_1;
CREATE INDEX ix_test_partiton_02_1 ON test_partiton_02(number_1) ; --默认创建的是 非分区索引,分区索引才分 全局索引还是本地索引 ;
---创建全局分区索引
CREATE INDEX ix_test_partiton_02_2 ON test_partiton_02(number_2)
GLOBAL PARTITION BY RANGE (number_2)
(PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (55000),
PARTITION p3 VALUES LESS THAN (MAXVALUE));
---写入测试数据
insert into test_partiton_02(number_1,
number_2,
string_1,
string_2)
select dbms_random.random() as number_1,
round(dbms_random.value(0, 100000)) as number_2,
dbms_random.string(opt => 'A', len => 1) as String_1,
dbms_random.string(opt => 'p', len => 10) as String_2
from dual
connect by rownum < 100001;
commit;
--分析表
analyze table test_partiton_02 compute statistics; --查看 普通索引是否可用
select * from user_indexes t where t.INDEX_NAME in('IX_TEST_PARTITON_02_1','IX_TEST_PARTITON_02_2','IX_TEST_PARTITON_02_3'); ---查看分区索引是否 可用
select * from user_ind_partitions t where t.INDEX_NAME in('IX_TEST_PARTITON_02_1','IX_TEST_PARTITON_02_2','IX_TEST_PARTITON_02_3'); ---改变分区,查看普通索引和分区索引是否可用 -- 必须调整最后一个分区的大小,所以如果最后一个分区指定了最大值 必须先删除,再添加
alter table test_partiton_02 add partition p6 values less than (90000); alter table test_partiton_02 drop partition p5; --- 结论 改变分区 普通索引和全局分区索引都会失效 只有本地分区索引好使
PS:最好用以下语句查看索引的定义语句
select dbms_metadata.get_ddl(object_type => 'INDEX',
name => 'IX_TEST_PARTITON_02_1')
FROM DUAL; select dbms_metadata.get_ddl(object_type => 'INDEX',
name => 'IX_TEST_PARTITON_02_2')
FROM DUAL;
--- 发现了 plsql developer Version 11.0.5.1790 (64 bit) 的一个 bug 在用View 查看 DDL时 没有反应真实的情况
Oracle非分区索引,全局分区索引和本地分区索引。的更多相关文章
- Oracle非重要文件恢复,redo、暂时文件、索引文件、password文件
增量备份的应用在recovery阶段.不再restore阶段 了解数据库设置表: SQL>desc database_properties Name ...
- oracle的局部本地分区索引
环境:oracle 12.2.0.1 注:未确定10g,11g是否有这些特性.现在基本不用10g,主要用12c,11g. 毫无疑问,这种 特性对于dba或者实施人员而言显得很重要,尤其当你的数据库主要 ...
- Oracle Spatial分区应用研究之六:全局空间索引下按县分区与按省分区效率差异原因分析
1.实验结论 全局空间索引下,不同分区粒度之所有效率会有不同,差异并不在于SDO_FILTER操作本身,而在于对于数据字典表的访问次数上: 分区越多.表上的lob column越多,对数据字典表的访问 ...
- Oracle Spatial分区应用研究之四:不同分区粒度+全局空间索引效率对比
1.实验目的 在实验之前先回答这样一个问题——对同一份数据使用不同的分区粒度,但均创建全局空间索引,问:它们的全局空间索引一致吗? 怎样算是一致的呢?R-TREE的树结构一致算一致吗?空间索引条目数及 ...
- 全局(Global) 与本地(Local)索引的区别
一.定义说明 oracle数据库中,存在多种对象,最常见的表和索引,索引的目的是为了加快查询:oracle建议一个表>2g时,就建议进行分区,分区表的好处此处省略,分区表有维护操作,但是某些维护 ...
- Oracle索引(1)概述与创建索引
索引是为了提高数据检索效率而创建的一种独立于表的存储结构,由Oracle系统自动进行维护. 索引的概述 索引是一种可选的与表或簇相关的数据库对象,能够为数据的查询提供快捷的存储路径,减少 ...
- Oracle Spatial分区应用研究之二:按县分区与按省分区对比测试报告
1.实验目的 在上一轮的实验中,oracle 11g r2版本下,在87县市实验数据的基础上,比较了分表与分区的效率,得出了分区+全局索引效率较高的结论(见上一篇博客).不过我们尚未比较过不同的分区粒 ...
- Oracle索引梳理系列(八)- 索引扫描类型及分析(高效索引必备知识)
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- Oracle主键约束、唯一键约束、唯一索引的区别
一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的.索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念.键代表创建来实施业务规则的完整性约束.索引和键的混淆通常是由于数据库使用索 ...
随机推荐
- linux 之实现定时任务
一.方式一 (1)命令行 的方法: 一.方式一 需求:每分钟执行一次/etc 目录的添加 到/tmp/a.txt 中 (1) touch a.txt创建文件 (2) crotab -e 进行任务的定制 ...
- c# log4net安装时在AssemblyInfo中提示找不到log4net解决办法
在安装log4net时,按照安装手册需要在AssemblyInfo.cs里添加log4net的配置信息 [assembly: log4net.Config.XmlConfigurator(Config ...
- signal,blinker:信号(看我脸色行事)
signal 什么是信号(signal)? 信号在linux中被用来进行进程间的通信和异步处理,简单地可以理解会为回调函数,当发送一个信号时,会触发相应的操作.python中的signal模块便是用来 ...
- 牛客练习赛44 A 小y的序列 (模拟,细节)
链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
- Zookeeper服务注册与发现原理浅析
了解Zookeeper的我们都知道,Zookeeper是一种分布式协调服务,在分布式应用中,主要用来实现分布式服务的注册与发现以及分布式锁,本文我们简单介绍一下Zookeeper是如何实现服务的注册与 ...
- jar is not a valid DFS filename
- Acwing-284-金字塔(区间DP)
链接: https://www.acwing.com/problem/content/description/286/ 题意: 虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下. ...
- 【JZOJ5428】【NOIP2017提高A组集训10.27】查询
题目 给出一个长度为n的序列a[] 给出q组询问,每组询问形如\(<x,y>\),求a序列的所有区间中,数字x的出现次数与数字y的出现次数相同的区间有多少个. 分析 我们可以维护一个前缀和 ...
- C# 常用方法—— 32位MD5加密
其他常用方法详见:https://www.cnblogs.com/zhuanjiao/p/12060937.html /// <summary> /// 32位MD5加密(小写) /// ...
- Harbor ($docker login) Error saving credentials
$ sudo apt-get install $ sudo apt-get install gnupg2 pass 问题解决!