--环境

SQL> select * from v$version where rownum<2;

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi

SQL> create user leshami identified by xxx;

SQL> grant dba to leshami;

--创建演示需要用到的表空间

SQL> create tablespace tbs_tmp datafile '/u02/database/SYBO2/oradata/tbs_tmp.dbf' size 10m autoextend on;

SQL> alter user leshami default tablespace tbs_tmp;

SQL> create tablespace tbs1 datafile '/u02/database/SYBO2/oradata/tbs1.dbf' size 10m autoextend on;

SQL> create tablespace tbs2 datafile '/u02/database/SYBO2/oradata/tbs2.dbf' size 10m autoextend on;

SQL> create tablespace tbs3 datafile '/u02/database/SYBO2/oradata/tbs3.dbf' size 10m autoextend on;

SQL> create tablespace idx1 datafile '/u02/database/SYBO2/oradata/idx1.dbf' size 10m autoextend on;

SQL> create tablespace idx2 datafile '/u02/database/SYBO2/oradata/idx2.dbf' size 10m autoextend on;

SQL> create tablespace idx3 datafile '/u02/database/SYBO2/oradata/idx3.dbf' size 10m autoextend on;

SQL> conn leshami/xxx

-- 创建一个lookup表

CREATE TABLE lookup (

id            NUMBER(10),

description   VARCHAR2(50)

);

--添加主键约束

ALTER TABLE lookup ADD (

CONSTRAINT lookup_pk PRIMARY KEY (id)

);

--插入数据

INSERT INTO lookup (id, description) VALUES (1, 'ONE');

INSERT INTO lookup (id, description) VALUES (2, 'TWO');

INSERT INTO lookup (id, description) VALUES (3, 'THREE');

COMMIT;

CREATE TABLE big_table (

id            NUMBER(10),

created_date  DATE,

lookup_id     NUMBER(10),

data          VARCHAR2(50)

)

PARTITION BY RANGE (created_date)

(PARTITION big_table_2012 VALUES LESS THAN (TO_DATE('01/01/2013', 'DD/MM/YYYY')) tablespace tbs1,

PARTITION big_table_2013 VALUES LESS THAN (TO_DATE('01/01/2014', 'DD/MM/YYYY')) tablespace tbs2,

PARTITION big_table_2014 VALUES LESS THAN (MAXVALUE)tablespace tbs3 ) ;

--填充数据到分区表

DECLARE

l_lookup_id    lookup.id%TYPE;

l_create_date  DATE;

BEGIN

FOR i IN 1 .. 10000 LOOP

IF MOD(i, 3) = 0 THEN

l_create_date := ADD_MONTHS(SYSDATE, -24);

l_lookup_id   := 2;

ELSIF MOD(i, 2) = 0 THEN

l_create_date := ADD_MONTHS(SYSDATE, -12);

l_lookup_id   := 1;

ELSE

l_create_date := SYSDATE;

l_lookup_id   := 3;

END IF;

INSERT INTO big_table (id, created_date, lookup_id, data)

VALUES (i, l_create_date, l_lookup_id, 'This is some data for ' || i);

END LOOP;

COMMIT;

END;

/

--未指定索引分区及存储表空间情形下创建索引

SQL> CREATE INDEX bita_created_date_i ON big_table(created_date) LOCAL;

Index created.

SQL> select index_name, partitioning_type, partition_count from user_part_indexes;

INDEX_NAME                     PARTITI PARTITION_COUNT

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

BITA_CREATED_DATE_I            RANGE                 3

--Author : Leshami

--从下面的查询可知,索引直接存放到分表表对应的表空间

SQL> select partition_name, high_value, tablespace_name from user_ind_partitions;

PARTITION_NAME                 HIGH_VALUE                               TABLESPACE_NAME

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

BIG_TABLE_2014                 MAXVALUE                                 TBS3

BIG_TABLE_2013                 TO_DATE(' 2014-01-01 00:00:00', 'SYYYY-M TBS2

M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

BIG_TABLE_2012                 TO_DATE(' 2013-01-01 00:00:00', 'SYYYY-M TBS1

M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

--删除索引

SQL> drop index bita_created_date_i;

--指定索引分区名表空间名创建索引

SQL> CREATE INDEX bita_created_date_i

2     ON big_table (created_date)

3     LOCAL (

4        PARTITION idx_2012 TABLESPACE idx1,

5        PARTITION idx_2013 TABLESPACE idx2,

6        PARTITION idx_2014 TABLESPACE idx3)

7     PARALLEL 3;

Index created.

SQL> select partition_name, high_value, tablespace_name from user_ind_partitions;

PARTITION_NAME                 HIGH_VALUE                               TABLESPACE_NAME

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

IDX_2014                       MAXVALUE                                 IDX3

IDX_2013                       TO_DATE(' 2014-01-01 00:00:00', 'SYYYY-M IDX2

M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

IDX_2012                       TO_DATE(' 2013-01-01 00:00:00', 'SYYYY-M IDX1

M-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA

SQL> select * from big_table where rownum<2;

ID CREATED_  LOOKUP_ID DATA

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

1413 20120625          2 This is some data for 1413

--查看local index是否被使用,从下面的执行计划中可知,索引被使用,支持分区消除

SQL> set autot trace exp;

SQL> select * from big_table where created_date=to_date('20120625','yyyymmdd');

Execution Plan

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

Plan hash value: 2556877094

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

| Id  | Operation                          | Name                | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |

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

|   0 | SELECT STATEMENT                   |                     |     1 |    41 |     2   (0)| 00:00:01 |       |       |

|   1 |  PARTITION RANGE SINGLE            |                     |     1 |    41 |     2   (0)| 00:00:01 |     1 |     1 |

|   2 |   TABLE ACCESS BY LOCAL INDEX ROWID| BIG_TABLE           |     1 |    41 |     2   (0)| 00:00:01 |     1 |     1 |

|*  3 |    INDEX RANGE SCAN                | BITA_CREATED_DATE_I |     1 |       |     1   (0)| 00:00:01 |     1 |     1 |

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

oracle全局索引 前缀索引_Oracle 分区索引介绍和实例演示相关推荐

  1. oracle 建分区索引_Oracle分区索引

    索引与表类似,也可以分区: 分区索引分为两类: Locally partitioned index(局部分区索引) Globally partitioned index(全局分区索引) 下面就来详细解 ...

  2. oracle 修索引改空间_oracle 修改索引现有表空间

    工作日记之<修改索引现有表空间> //dba_indexes可查询所有索引,以及索引部分信息,可以灵活运用于其他用途 //假设用户USER1现有表空间TS1.TS2,需要迁移其下所有表空间 ...

  3. Oracle 数据库直接执行本地sql文件、sql脚本实例演示

    @ + sql 文件路径即可执行 sql 文件里的 sql 语句. 实例演示: 我要执行的 sql 文件路径是 C:\Users\Administrator\Desktop\delete.sql , ...

  4. (2)存储过程中可以调用其他存储过程吗?_详解Oracle创建存储过程、创建函数、创建包及实例演示...

    概述 说句实在的,平时工作基本上不会去背啥创建存储过程.创建函数.创建包之类的语法,但是相信大家面试啥的却基本会笔试这些,所以就对存储过程.函数和包的语法做下总结,也做个备忘!这里面语法大家理解就可以 ...

  5. oracle实例提示blocked,Oracle 阻塞(blocking blocked)介绍和实例演示

    阻塞是DBA经常碰到的情形,尤其是不良的应用程序设计的阻塞将导致性能严重下降直至数据库崩溃.对DBA而言,有必要知道如何定位到当前系统有哪些阻塞,到底谁是阻塞者,谁是被阻塞者.本文对此给出了描述并做了 ...

  6. oracle全局索引改成本地索引,FAQ : 如何获得 Oracle 分区索引的类型 - 全局分区索引、本地分区索引...

    Oracle 数据库针对分区的信息,通过多个数据字典视图来维护,所以在获取信息时,经常会困惑 DBA 们. 例如,如何获取 分区索引的类型,如何判断一个索引,是 全局分区索引,还是本地分区索引? 通过 ...

  7. oracle全局索引改成本地索引,解析一个通过添加本地分区索引提高SQL性能的案例...

    该sql如下: Select  /*+ parallel(src, 8) */ distinct src.systemname as systemname ,  src.databasename as ...

  8. oracle删除建分区索引,Oracle分区表之创建维护分区表索引的详细步骤

    分区索引分为本地(local index)索引和全局索引(global index).局部索引比全局索引容易管理, 而全局索引比较快.与索引有关的表:dba_part_indexes 分区索引的概要统 ...

  9. oracle分区索引及循环插入

    表可以按range.hash.list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限性做个总结. 局 ...

最新文章

  1. 前端测试 jest 中判断函数由来
  2. SQL 聚合函数一定要跟group by以及NULL的关系的案例精讲
  3. Qt|C++-OpenGL绘制三角形带
  4. 把计算机怎么连接手机的网络助手在哪里,手机连接电脑上网,详细教您手机如何连接电脑上网...
  5. mysql 查询正在运行的事务并且杀掉该事务
  6. 【嵌入式系统—ARM指令集】快速了解
  7. wireshark 安装失败报错,缺少kb2999226补丁的解决方案
  8. 设计必备的配色工具01
  9. 一天破万:二十一个微信公众号推广技巧
  10. 中国新能源汽车行业十四五展望规划与投资决策建议报告2022版
  11. 跨域问题(Vue开发中遇到的跨域问题)以及解决方法
  12. uni-app实现XCode苹果本地离线打包APP
  13. boost 进程间通信-share memery传递字符串
  14. 如何在Fedora 上dnf安装Node.js
  15. 文字识别(一)--传统方案综述
  16. xctf攻防世界 MISC高手进阶区 打野
  17. LWN:万维网之外的选择!
  18. 32位系统的内存访问
  19. 模拟输入H.264流,输出封装格式文件
  20. 关于硬盘扇区的基本知识

热门文章

  1. 2020了,还要学JSP嘛?入个门呗!毕竟Servlet亲兄弟~
  2. 华为4D成像雷达、智能驾驶平台MDC 810
  3. 在 CUDA C/C++ kernel中使用内存
  4. 低层级GPU虚拟内存管理引论
  5. 计算机组成原理-第一章
  6. 2021年大数据Spark(四十六):Structured Streaming Operations 操作
  7. python 使用import导入不同文件下的文件
  8. CoordinatorLayout 和 AppBarLayout 实现的局部点击按钮实现滑动某一个固定的距离
  9. INSTALL_FAILED_USER_RESTRICTED
  10. No subscribers registered for event class