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主键约束、唯一键约束、唯一索引的区别
一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的.索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念.键代表创建来实施业务规则的完整性约束.索引和键的混淆通常是由于数据库使用索 ...
随机推荐
- MySQL查询一张表有多少个字段
SQL如下 select count(*) from information_schema.COLUMNS where TABLE_SCHEMA='数据库名' and table_name='表名'
- numpy中与金融有关的函数
fv函数 计算未来的价值 def fv(rate, nper, pmt, pv, when='end'): ... 参数: rate:存款/贷款每期的利率 nper:存款/贷款期数 pmt:存款/贷款 ...
- IO模型(epoll)--详解-02
写在前面 从事服务端开发,少不了要接触网络编程.epoll作为linux下高性能网络服务器的必备技术至关重要,大部分游戏服务器都使用到这一多路复用技术.文章核心思想是:要让读者清晰明白EPOLL为什么 ...
- php中限制ip段访问、禁止ip提交表单的代码
在需要禁止访问或提交表单的页面添加下面的代码进行判断就可以了. 注意:下边只是一个PHP限制IP的实例代码,如果您打算应用到CMS中,请自行修改. <?php /加IP访问限制 if(geten ...
- 二分答案 + multiset || NOIP 2018 D1 T3 || Luogu P5021 赛道修建
题面:P5021 赛道修建 题解:二分答案,用Dfs进行判断,multiset维护. Dfs(x,fa,Lim)用来计算以x为根的子树中有多少符合条件的路径,并返回剩余未使用的最长路径长. 贪心思想很 ...
- glViewport函数用法
一. 其函数原型为glViewport(GLint x,GLint y,GLsizei width,GLsizei height) x,y 以像素为单位,指定了窗口的左下角位置. width,heig ...
- 第07课:【实战】调试Redis准备工作
7.1 Redis源码下载与编译 Redis源码下载与编译在前面已经说过了,同学们可以去第04课:GDB常用命令详解(上)学习. 编译成功后,会在src目录下生成多个可执行程序,其中redis-ser ...
- noi.ac NA531 【神树和物品】
今日成就:本来以为过了这题,然后被mcfx发现写假并针对地造了一组hack数据之后FST了. 复杂度什么的咱也不会证,咱也不会卡,被hack之后只能FST. 是个决策单调性sb题,但是由于太菜不怎么会 ...
- 动软生成器 model生成模板
<#@ template language="c#" HostSpecific="True" #> <#@ output extension= ...
- mysql自动化审核工具Yearning
mysql自动化审核工具Yearning cd /opt/wget https://github-production-release-asset-2e65be.s3.amazonaws.com/10 ...