oracle自动分区如何创建本地索引吗,创建与管理Oracle分区表和本地索引的实例解析...
创建与管理Oracle分区表和本地索引的相关知识是本文我们主要要介绍的内容,我们知道,Oracle的分区技术在某些条件下可以极大的提高查询的性能,所以被广泛采用。从产品上说,分区技术是Oracle企业版中独立收费的一个组件。以下是对于分区及本地索引的一个示例。
首先根据字典表创建一个测试分区表:
SQL>connect eygle/eygle
Connected.
SQL>CREATE TABLE dbobjs
2 (OBJECT_ID NUMBER NOT NULL,
3 OBJECT_NAME varchar2(128),
4 CREATED DATE NOT NULL
5 )
6 PARTITION BY RANGE (CREATED)
7 (PARTITION dbobjs_06 VALUES LESS THAN (TO_DATE('01/01/2007', 'DD/MM/YYYY')),
8 PARTITION dbobjs_07 VALUES LESS THAN (TO_DATE('01/01/2008', 'DD/MM/YYYY')));
Table created.
SQL>COL segment_name for a20
SQL>COL PARTITION_NAME for a20
SQL>SELECT segment_name, partition_name, tablespace_name
2 FROM dba_segments
3 WHEREsegment_name='DBOBJS';
SEGMENT_NAME PARTITION_NAME TABLESPACE_NAME
-------------------- -------------------- ------------------------------
DBOBJS DBOBJS_06 EYGLE
DBOBJS DBOBJS_07 EYGLE
创建一个Local索引,注意这里可以将不同分区的索引指定创建到不同的表空间:
SQL>CREATE INDEX dbobjs_idx ON dbobjs (created) LOCAL
2 (PARTITION dbobjs_06 TABLESPACE users,
3 PARTITION dbobjs_07 TABLESPACE users
4 );
Index created.
这个子句可以进一步调整为类似:
CREATE INDEX dbobjs_idx ON dbobjs (created) LOCAL
(PARTITION dbobjs_06 TABLESPACE users,
PARTITION dbobjs_07 TABLESPACE users
) TABLESPACE users;
通过统一的tablespace子句为索引指定表空间。
SQL>COL segment_name for a20
SQL>COL PARTITION_NAME for a20
SQL>SELECT segment_name, partition_name, tablespace_name
2 FROM dba_segments
3 WHEREsegment_name='DBOBJS_IDX';
SEGMENT_NAME PARTITION_NAME TABLESPACE_NAME
-------------------- -------------------- ------------------------------
DBOBJS_IDX DBOBJS_06 USERS
DBOBJS_IDX DBOBJS_07 USERS
SQL>insert into dbobjs
2 select object_id,object_name,created
3 from dba_objects where created
6227 rows created.
SQL>commit;
Commit complete.
SQL>select count(*) from dbobjs partition (DBOBJS_06);
COUNT(*)
----------
6154
SQL>select count(*) from dbobjs partition (dbobjs_07);
COUNT(*)
----------
73
我们可以通过查询来对比一下分区表和非分区表的查询性能差异:
SQL>set autotrace on
SQL>select count(*) from dbobjs where created
COUNT(*)
----------
6227
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENTptimizer=CHOOSE(Cost=1Card=1Bytes=9)
1 0 SORT (AGGREGATE)
2 1 PARTITION RANGE (ALL)
3 2 INDEX (RANGE SCAN) OF 'DBOBJS_IDX' (NON-UNIQUE) (Cost=2Card=8Bytes=72)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
25 consistent gets
0 physical reads
0 redo size
380 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL>select count(*) from dbobjs where created
COUNT(*)
----------
6154
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENTptimizer=CHOOSE(Cost=1Card=1Bytes=9)
1 0 SORT (AGGREGATE)
2 1 INDEX (RANGE SCAN) OF 'DBOBJS_IDX' (NON-UNIQUE) (Cost=2Card=4Bytes=36)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
24 consistent gets
0 physical reads
0 redo size
380 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL>select count(distinct(object_name)) from dbobjs where created
COUNT(DISTINCT(OBJECT_NAME))
----------------------------
4753
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENTptimizer=CHOOSE(Cost=1Card=1Bytes=75)
1 0 SORT (GROUP BY)
2 1 TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'DBOBJS' (Cost=1Card=4Bytes=300)
3 2 INDEX (RANGE SCAN) OF 'DBOBJS_IDX' (NON-UNIQUE) (Cost=2Card=1)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
101 consistent gets
0 physical reads
0 redo size
400 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed
对于非分区表的测试:
SQL>CREATE TABLE dbobjs2
2 (object_id NUMBER NOT NULL,
3 object_name VARCHAR2(128),
4 created DATE NOT NULL
5 );
Table created.
SQL>CREATE INDEX dbobjs_idx2 ON dbobjs2 (created);
Index created.
SQL>insert into dbobjs2
2 select object_id,object_name,created
3 from dba_objects where created
6227 rows created.
SQL>commit;
Commit complete.
SQL>select count(distinct(object_name)) from dbobjs2 where created
COUNT(DISTINCT(OBJECT_NAME))
----------------------------
4753
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENTptimizer=CHOOSE
1 0 SORT (GROUP BY)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'DBOBJS2'
3 2 INDEX (RANGE SCAN) OF 'DBOBJS_IDX2' (NON-UNIQUE)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2670 consistent gets
0 physical reads
1332 redo size
400 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed
当增加表分区时,LOCAL索引被自动维护:
SQL>ALTER TABLE dbobjs
2 ADD PARTITION dbobjs_08 VALUES LESS THAN (TO_DATE('01/01/2009', 'DD/MM/YYYY'));
Table altered.
SQL>set autotrace off
SQL>COL segment_name for a20
SQL>COL PARTITION_NAME for a20
SQL>SELECT segment_name, partition_name, tablespace_name
2 FROM dba_segments
3 WHEREsegment_name='DBOBJS_IDX';
SEGMENT_NAME PARTITION_NAME TABLESPACE_NAME
-------------------- -------------------- ------------------------------
DBOBJS_IDX DBOBJS_06 USERS
DBOBJS_IDX DBOBJS_07 USERS
DBOBJS_IDX DBOBJS_08 EYGLE
SQL>SELECT segment_name, partition_name, tablespace_name
2 FROM dba_segments
3 WHEREsegment_name='DBOBJS';
SEGMENT_NAME PARTITION_NAME TABLESPACE_NAME
-------------------- -------------------- ------------------------------
DBOBJS DBOBJS_06 EYGLE
DBOBJS DBOBJS_07 EYGLE
DBOBJS DBOBJS_08 EYGLE
关于创建与管理Oracle分区表和本地索引的相关知识及实例就介绍到这里了,如果您想了解更多关于Oracle数据库的知识,可以看一下这里的文章:http://database.51cto.com/oracle/,希望本次的介绍能够对您有所收获!
【编辑推荐】
【责任编辑:赵鹏 TEL:(010)68476606】
点赞 0
oracle自动分区如何创建本地索引吗,创建与管理Oracle分区表和本地索引的实例解析...相关推荐
- oracle自动恢复数据库文件,只有数据文件情况下恢复Oracle数据库
只有数据文件情况下恢复数据库 1,创建几个表,进行 log switch SQL> create table t9 as select * from dba_tables; Table crea ...
- oracle自动分区maxvalue,对Maxvalue上限范围分区进行spilt操作
Oracle分区表是对关键数据表,特别是海量数据表的一种普适性很好的技术方案.借助分区表,通常都可以有效的提升数据表访问性能,增强系统可管理能力.对分区表设计通常具有三个方面的决策点,分别为分区类型分 ...
- oracle自动分区maxvalue,分区表中的maxvalue参数设置-Oracle
分区表中的maxvalue参数设置 结论:partition p3 values less than (maxvalue) 分区表中maxvalue如果用具体参数来代替,则整个表中可插入的最大值不 ...
- oracle占用内存 100,System表空间占用率100%,管理Oracle系统审计
C:\Users\user>sqlplus sys/********@lin_solgle as sysdba SQL*Plus: Release 11.2.0.1.0 Production o ...
- 本地计算机策略无法建立管理单元,我的本地安全策略用不了!打开管理工具的本地安全策略管理单元初始化 爱问知识人...
现象:运行gpedit.msc 提示如下: 管理单元初始化失败. 名称:组策略 CLSID:{8FC0B734-A0E1-11D1-A7D3-0000F87571E3} 解决: 方法一.1.点击『开始 ...
- oracle10G分区的创建与维护Oracle分区表和本地索引
Oracle的分区技术在某些条件下可以极大的提高查询的性能,所以被广泛采用.从产品上说,分区技术是Oracle企业版中独立收费的一个组件.以下是对于分区及本地索引的一个示例. Oracle的分区技术在 ...
- oracle分区属于什么知识,详细讲解Oracle表分区的相关概念及其优点
Oracle 8i以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组大表在物理一级的可管理性.将大表分割成较小的分区可以改善表的维护.备份.恢复.事务及查询 ...
- ES索引的生命周期管理
ES索引的生命周期管理 介绍 ES可用于索引日志类数据,在此场景下,数据是源源不断地被写入到索引中.为了使索引的文档不会过多,查询的性能更好,我们希望索引可以根据大小.文档数量或索引已创建时长等指 ...
- oracle10g 创建分区表,oracle10G分区的创建与维护Oracle分区表和本地索引
Oracle的分区技术在某些条件下可以极大的提高查询的性能,所以被广泛采用.从产品上说,分区技术是Oracle企业版中独立收费的一个组件.以下是对于分区及本地索引的一个示例. Oracle的分区技术在 ...
最新文章
- 216位攻城狮送给程序猿的10个新年礼物
- CSS3动画之百度钱包
- fwrite函数的一般调用形式是什么?
- jsp页面路径问题(404)
- 自动驾驶轻松开发?华为云ModelArts赋能智慧出行
- 【Qt教程】1.9 - Qt5菜单栏、工具栏、状态栏、核心窗口、浮动窗口、QMainWindow
- 基于迁移学习的辣椒病虫害搜索模型(裁剪病害区)
- matlab轴向柱塞泵动力学仿真,基于ADAMS柔性模型的轴向柱塞泵动力学仿真
- YOLO系列目标检测算法-YOLOv2
- node.js中操作数据库
- 【通俗理解】股票、基金、证券、债券、信托、期货、国债、外汇
- 汽车CAN总线入门,通俗易懂
- 5.11 按照文字的笔划进行数据的排序 [原创Excel教程]
- ABeam (德硕)News | 喜提「SAP BTP 最佳实施合作伙伴」奖项
- R语言-神经网络包RSNNS
- 启动tomcat闪退如何获取报错信息
- 计算机的储存器包括内存储器和外存储器,内存储器和外存储器的分类与区别
- 关于剪枝对象的分类(weights剪枝、神经元剪枝、filters剪枝、layers剪枝、channel剪枝、对channel分组剪枝、Stripe剪枝)
- 51单片机红外电子密码锁【红外对管矩阵键盘数码管LCD1602显示模块】
- firefox网页自动翻译