全局(Global) 与本地(Local)索引的区别
一、定义说明
oracle数据库中,存在多种对象,最常见的表和索引,索引的目的是为了加快查询;oracle建议一个表>2g时,就建议进行分区,分区表的好处此处省略,分区表有维护操作,但是某些维护操作对整个表的索引维护造成巨大开销,因此本地索引就是解决分区表管理的问题。
非分区索引创建方式,create index index_name on table_name(column_name);
查询索引状态从dba_indexes->status列查询
全局分区索引创建,create index index_name on table_name(column_name) global partition by range(column_name) (partition p1 values less than (11104) tablespace system,partition p2 values less than (11100) tablespace users,partition p3 values less than (maxvalue) tablespace sysaux.) or partition by hash (id) partitions 8 online等;
查询索引状态dba_ind_partitions->STATUS列查询
查询分区索引类型,是全局or本地 DBA_PART_INDEXES ->LOCALITY
本地分区索引创建,create index index_name on table_name(column_name) local;
查询索引状态dba_ind_partitions->STATUS列查询
二、create/selet 说明
) 非分区索引
SQL> create index ind_1 on range_part_tab(deal_date);
Index created.
SQL> select index_name,PARTITION_NAME,HIGH_VALUE,STATUS,TABLESPACE_NAME from dba_ind_partitions where index_owner='SYS' and index_name='IND_1'; no rows selected SQL> select index_name,STATUS,GLOBAL_STATS,TABLESPACE_NAME from dba_indexes where owner='SYS' and index_name='IND_1'; INDEX_NAME STATUS GLO TABLESPACE_NAME
------------------------------ -------- --- ------------------------------
IND_1 VALID YES SYSTEM STATUS 表示一个非分区索引是否VALID或UNUSABLE GLOBAL_STATUS 对于分区索引,指示是通过分析整个索引(YES)来收集统计信息,还是根据基础索引分区和子分区(NO)的统计信息进行估计
)全局分区索引
create index ind_3 on range_part_tab(area_code) global partition by range(area_code) (partition p1 values less than (11104) tablespace system,partition p2 values less than (11100) tablespace users,partition p3 values less than (maxvalue) tablespace sysaux)
*
ERROR at line 1:
ORA-14037: partition bound of partition "P1" is too high
12:39:59 SYS@ceshi>select area_code,count(*) from range_part_tab group by area_code;
AREA_CODE COUNT(*)
---------- ----------
599 11104
594 11074
596 11021
593 11113
595 10927
592 11214
598 11235
591 11169
597 11143
9 rows selected. 全局范围分区索引,第一个分区不能比所有的值都大
SYS@ceshi>create index ind_3 on range_part_tab(area_code) global partition by range(area_code) (partition p1 values less than (592) tablespace system,partition p2 values less than (11100) tablespace users,partition p3 values less than (maxvalue) tablespace sysaux);
Index created.
select index_name,PARTITION_NAME,HIGH_VALUE,STATUS,TABLESPACE_NAME from dba_ind_partitions where index_owner='SYS' and index_name='IND_3'
INDEX_NAME PARTITION_ HIGH_VALUE STATUS TABLESPACE_NAME
---------- ---------- ------------------------------ -------- ------------------------------
IND_3 P1 592 USABLE SYSTEM
IND_3 P2 11100 USABLE USERS
IND_3 P3 MAXVALUE USABLE SYSAUX
PARTITION_NAME 索引的分区名称
HIGH_VALUE 索引分区的范围条件
STATUS 分区索引的状态
SYS@ceshi>select index_name,table_name,PARTITIONING_TYPE,SUBPARTITIONING_TYPE,PARTITION_COUNT,LOCALITY,DEF_TABLESPACE_NAME from DBA_PART_INDEXES where index_name='IND_3';
INDEX_NAME TABLE_NAME PARTITION SUBPARTIT PARTITION_COUNT LOCALI DEF_TABLESPACE_NAME
---------- ------------------------------ --------- --------- --------------- ------ ------------------------------
IND_3 RANGE_PART_TAB RANGE NONE 3 GLOBAL SYSTEM
hash全局分区索引,使用场景较多,例如索引块争用,且表为非分区表时
SYS@ceshi>create table a1 as select * from range_part_tab;
SYS@ceshi>create index ind_4 on a1(id) global partition by hash (id) partitions 8 online;
Index created.
SYS@ceshi>alter index ind_4 parallel 1;
Index altered.
select index_name,PARTITION_NAME,HIGH_VALUE,STATUS,TABLESPACE_NAME from dba_ind_partitions where index_owner='SYS' and index_name='IND_4'
INDEX_NAME PARTITION_NAME HIGH_VALUE STATUS TABLESPACE_NAME
------------------------------ ------------------------------ ---------- -------- ------------------------------
IND_4 SYS_P61 USABLE SYSTEM
IND_4 SYS_P62 USABLE SYSTEM
IND_4 SYS_P63 USABLE SYSTEM
IND_4 SYS_P64 USABLE SYSTEM
IND_4 SYS_P65 USABLE SYSTEM
IND_4 SYS_P66 USABLE SYSTEM
IND_4 SYS_P67 USABLE SYSTEM
IND_4 SYS_P68 USABLE SYSTEM
8 rows selected.
SYS@ceshi>select index_name,table_name,PARTITIONING_TYPE,SUBPARTITIONING_TYPE,PARTITION_COUNT,LOCALITY,DEF_TABLESPACE_NAME from DBA_PART_INDEXES where index_name='IND_4';
INDEX_NAME TABLE_NAME PARTITION SUBPARTIT PARTITION_COUNT LOCALI DEF_TABLESPACE_NAME
------------------------------ ------------------------------ --------- --------- --------------- ------ ------------------------------
IND_4 A1 HASH NONE 8 GLOBAL SYSTEM
) 本地分区索引
SQL> create index ind_2 on range_part_tab(id) local;
Index created.
select index_name,PARTITION_NAME,HIGH_VALUE,STATUS,TABLESPACE_NAME from dba_ind_partitions where index_owner='SYS' and index_name='IND_2'
INDEX_NAME PARTITION_ HIGH_VALUE STATUS TABLESPACE_NAME
------------------ -----------------------------------------------------------------------------------------------------------------------
IND_2 P1 TO_DATE(' 2017-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P10 TO_DATE(' 2017-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P11 TO_DATE(' 2017-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P12 TO_DATE(' 2018-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P2 TO_DATE(' 2017-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P3 TO_DATE(' 2017-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P4 TO_DATE(' 2017-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P5 TO_DATE(' 2017-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P6 TO_DATE(' 2017-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P7 TO_DATE(' 2017-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P8 TO_DATE(' 2017-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P9 TO_DATE(' 2017-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') USABLE SYSTEM
IND_2 P_MAX MAXVALUE USABLE SYSTEM
13 rows selected.
SYS@ceshi>select index_name,table_name,PARTITIONING_TYPE,SUBPARTITIONING_TYPE,PARTITION_COUNT,LOCALITY,DEF_TABLESPACE_NAME from DBA_PART_INDEXES where index_name='IND_2';
INDEX_NAME TABLE_NAME PARTITION SUBPARTIT PARTITION_COUNT LOCALI DEF_TABLESPACE_NAME
---------- ------------------------------ --------- --------- --------------- ------ ------------------------------
IND_2 RANGE_PART_TAB RANGE NONE 13 LOCAL
三、索引的重建
非分区索引:
SQL> alter index ind_1 rebuild;
全局分区索引:
SQL> alter table range_part_tab move partition p1;
Table altered.
SQL> select TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from dba_tab_partitions
where TABLE_OWNER='SYS' and TABLE_NAME='RANGE_PART_TAB';
TABLE_NAME PARTITION_ TABLESPACE_NAME
------------------------------ ---------- ------------------------------
RANGE_PART_TAB P1 SYSTEM
RANGE_PART_TAB P10 SYSTEM
RANGE_PART_TAB P11 SYSTEM
SQL> select index_name,PARTITION_NAME,HIGH_VALUE,STATUS,TABLESPACE_NAME
from dba_ind_partitions where index_owner='SYS' and index_name='IND_3';
INDEX_NAME PARTITION_ HIGH_VALUE STATUS TABLESPACE_NAME
---------- ---------- -------------------- -------- ------------------------------
IND_3 P1 592 USABLE SYSTEM
IND_3 P2 11100 USABLE USERS
IND_3 P3 MAXVALUE USABLE SYSAUX
SQL> alter index ind_3 rebuild partition p1;
Index altered.
全局分区索引,单个分区的move并不会导致全局分区索引的失效
本地分区索引
select index_name,PARTITION_NAME,STATUS,TABLESPACE_NAME
from dba_ind_partitions where index_owner='SYS' and index_name='IND_2';
INDEX_NAME PARTITION_ STATUS TABLESPACE_NAME
---------- ---------- -------- ------------------------------
IND_2 P1 USABLE SYSTEM
IND_2 P10 USABLE SYSTEM
IND_2 P11 USABLE SYSTEM
IND_2 P12 USABLE SYSTEM
SQL> alter table range_part_tab move partition p1;
Table altered
SQL> alter index ind_2 rebuild partition p1;
Index altered.
全局(Global) 与本地(Local)索引的区别的更多相关文章
- 【原】nodejs全局安装和本地安装的区别
来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...
- Oracle非分区索引,全局分区索引和本地分区索引。
1.如果按照索引是否分区作为划分依据,Oracle 的索引类型可以分为非分区索引,全局分区索引和本地分区索引. 2.创建演示实例 --创建非分区表create table test_partition ...
- Windows下nodejs 模块配置 全局模式与本地模式的区别
第1步:下载.安装文件 (nodejs的官网http://www.nodejs.org/download/ ) 第2步:安装相关模块环境 打开C:\Program Files\nodejs 目录你会发 ...
- [学习笔记]nodejs全局安装和本地安装的区别
参考来源于 nodejs全局安装和本地安装的区别 1.全局安装 $ npm install gulp --global 2.作为项目的开发一开(devDependencies)安装 $ npm ins ...
- oracle的局部本地分区索引
环境:oracle 12.2.0.1 注:未确定10g,11g是否有这些特性.现在基本不用10g,主要用12c,11g. 毫无疑问,这种 特性对于dba或者实施人员而言显得很重要,尤其当你的数据库主要 ...
- python中全局global和局部nonlocal命名空间
python中全局global和局部nonlocal命名空间 局部名称空间对全局名称空间的变量可以引用,但是无法改变. count = 1 def func1(): count = 2 print(c ...
- oracle唯一索引与普通索引的区别和联系以及using index用法
oracle唯一索引与普通索引的区别和联系 区别:唯一索引unique index和一般索引normal index最大的差异是在索引列上增加一层唯一约束.添加唯一索引的数据列可以为空,但是只要尊在数 ...
- B+树索引和哈希索引的区别——我在想全文搜索引擎为啥不用hash索引而非得使用B+呢?
哈希文件也称为散列文件,是利用哈希存储方式组织的文件,亦称为直接存取文件.它类似于哈希表,即根据文件中关键字的特点,设计一个哈希函数和处理冲突的方法,将记录哈希到存储设备上. 在哈希文件中,是使用一个 ...
- MySQL单列索引和组合索引的区别介绍
MySQL单列索引和组合索引的区别介绍 作者:佚名出处:IT专家网2010-11-22 13:05 MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有 ...
随机推荐
- 几种常见的开源软件许可协议(GPL, LGPL, Apache License, BSD)
GPL GPL授予程序接受人以下权利,或称“自由”: * 以任何目的运行此程序的自由 * 以学习程序工作机理为目的,对程序进行修改的自由(能得到源代码是前提) * 再发行复制件的自由 * 改进此程序, ...
- 青蛙跳N阶(变态跳)
https://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387 描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级 ...
- ActiveMQ producer 提交事务时突然宕机,会发生什么
producer 在提交事务时,发生宕机,commit 的命令没有发送到 broker,这时会发生什么? ActiveMQ 开启事务发送消息的步骤: session.getTransactionCon ...
- Qt Widgets——子区域和子窗口
QMdiArea 一般使用于主窗口QMainWindow,用于容纳多个子窗口QMdiSubWindow qt creator 3.0的设计师有MdiArea可直接拖入使用. 界面如下,图中灰色框即是个 ...
- 【转】Netty之解决TCP粘包拆包(自定义协议)
1.什么是粘包/拆包 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据.TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消 ...
- 运行网站项目时,有时出现Bad Request,该怎么解决?
有时运行网站项目时,出现Bad Request问题
- composer install Your requirements could not be resolved to an installable set of packages
composer install --ignore-platform-reqs 或者 composer update --ignore-platform-reqs
- mysql如何让自增id从某个位置开始设置方法
一般情况下两种方式: 1.本地数据不需要的情况下直接情况表(尽量不使用
- 【框架】用excel管理测试用例需要的参数数据(二)
一.总体思路 以类为excel名,测试方法名为sheet名,建立excel文件.用jxl包里的方法去读取excel文件里的内容,然后用testng里的dataprovider,将数据传递给测试用例 二 ...
- shell 多重条件判断
多重条件判断 '判断1 -a 判断2' 逻辑与,判断1和判断2都成立,最终的结果才为真 '判断1 -o 判断2' 逻辑或,判断1和判断2有一个成立,最终的结果就为真 '!判断' 逻辑非,使原始的判断式 ...