在网上看到eygle写的一篇关于分区表和本地索引的文章,感觉总结的挺好,特转了过来。

     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 WHERE segment_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 WHERE segment_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 < to_date('01/01/2008','dd/mm/yyyy');
  COUNT(*)
  ----------
  6227
  Execution Plan
  ----------------------------------------------------------
  0 SELECT STATEMENT ptimizer=CHOOSE (Cost=1 Card=1 Bytes=9)
  1 0 SORT (AGGREGATE)
  2 1 PARTITION RANGE (ALL)
  3 2 INDEX (RANGE SCAN) OF 'DBOBJS_IDX' (NON-UNIQUE) (Cost=2 Card=8 Bytes=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 < to_date('01/01/2007','dd/mm/yyyy');
  COUNT(*)
  ----------
  6154
  Execution Plan
  ----------------------------------------------------------
  0 SELECT STATEMENT ptimizer=CHOOSE (Cost=1 Card=1 Bytes=9)
  1 0 SORT (AGGREGATE)
  2 1 INDEX (RANGE SCAN) OF 'DBOBJS_IDX' (NON-UNIQUE) (Cost=2 Card=4 Bytes=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 < to_date('01/01/2007','dd/mm/yyyy');
  COUNT(DISTINCT(OBJECT_NAME))
  ----------------------------
  4753
  Execution Plan
  ----------------------------------------------------------
  0 SELECT STATEMENT ptimizer=CHOOSE (Cost=1 Card=1 Bytes=75)
  1 0 SORT (GROUP BY)
  2 1 TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'DBOBJS' (Cost=1 Card=4 Bytes=300)
  3 2 INDEX (RANGE SCAN) OF 'DBOBJS_IDX' (NON-UNIQUE) (Cost=2 Card=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 < to_date('01/01/2007','dd/mm/yyyy');
  COUNT(DISTINCT(OBJECT_NAME))
  ----------------------------
  4753
  Execution Plan
  ----------------------------------------------------------
  0 SELECT STATEMENT ptimizer=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 WHERE segment_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 WHERE segment_name = 'DBOBJS';
  SEGMENT_NAME PARTITION_NAME TABLESPACE_NAME
  -------------------- -------------------- ------------------------------
  DBOBJS DBOBJS_06 EYGLE
  DBOBJS DBOBJS_07 EYGLE
  DBOBJS DBOBJS_08 EYGLE

  

PS:我建了几个oracle QQ群,欢迎数据库爱好者加入。

Oracle专家QQ1群:60632593

Oracle专家QQ2群:60618621

Oracle专家QQ3群:23145225

-The End-

创建与管理Oracle的分区表和本地索引相关推荐

  1. oracle自动分区如何创建本地索引吗,创建与管理Oracle分区表和本地索引的实例解析...

    创建与管理Oracle分区表和本地索引的相关知识是本文我们主要要介绍的内容,我们知道,Oracle的分区技术在某些条件下可以极大的提高查询的性能,所以被广泛采用.从产品上说,分区技术是Oracle企业 ...

  2. oracle10g 创建分区表,oracle10G分区的创建与维护Oracle分区表和本地索引

    Oracle的分区技术在某些条件下可以极大的提高查询的性能,所以被广泛采用.从产品上说,分区技术是Oracle企业版中独立收费的一个组件.以下是对于分区及本地索引的一个示例. Oracle的分区技术在 ...

  3. oracle10G分区的创建与维护Oracle分区表和本地索引

    Oracle的分区技术在某些条件下可以极大的提高查询的性能,所以被广泛采用.从产品上说,分区技术是Oracle企业版中独立收费的一个组件.以下是对于分区及本地索引的一个示例. Oracle的分区技术在 ...

  4. oracle 10g 分区管理,Oracle 10g分区表的自动维护

    Oracle 10g分区表不支持自动化管理,一般都要手动创建分区,手动删除.今天给大家带来了一个自动化管理表空间的脚本. 本脚本主要由3个部分组成:sys_ConfigTable.sql.sys_pr ...

  5. oracle不适合建立索引的场景,Oracle 分区表中本地索引和全局索引的适用场景

    背景 分区表创建好了之后,如果需要最大化分区表的性能就需要结合索引的使用,分区表有两种索引:本地索引和全局索引.既然存在着两种的索引类型,相信存在即合理.既然存在就会有存在的原因,也就是在特定的场景中 ...

  6. 分区表的本地索引竟然失效了——ORA-01502

    由于昨天对一个千万级别的分区表做了分区数据交换的操作,因为本表操作太慢,所以将其移出普通表操作后才移回分区表,但是今天又反馈该表的某字段为条件查询速度很慢,自己试了下果真如此,我看了查询语句的执行计划 ...

  7. mysql 分区索引失效_分区表的本地索引竟然失效了——ORA-01502

    由于昨天对一个千万级别的分区表做了分区数据交换的操作,因为本表操作太慢,所以将其移出普通表操作后才移回分区表,但是今天又反馈该表的某字段为条件查询速度很慢,自己试了下果真如此,我看了查询语句的执行计划 ...

  8. oracle账号注册公司名称,oracle+账号创建与管理oracle创建数据库

    方法/步骤 1.从Windows桌面执行"开始"→"程序"→"Oracle – "→"配置和移置工具"→"Da ...

  9. oracle手动分区改为自动分区,oracle12c在线转换分区表,本地索引,自动按月间隔分区...

    SELECT count(*) FROM AAA_DATA;  --AAA话单数据表 SELECT count(*) FROM IPTV_HW_DATA;  --IPTV华为数据表 SELECT co ...

  10. oracle 建分区索引_Oracle的分区表和Local索引创建与维护

    Oracle的分区表和Local索引创建与维护 SQL> connect eygle/eygle Connected. SQL> CREATE TABLE dbobjs 2  (OBJEC ...

最新文章

  1. ubuntu11.04中如何像其他版本一样快速回到桌面
  2. 计算机等级考试计算机基础知识pdf,计算机基础知识与应用能力等级考试.pdf
  3. Sharepoint 自定义字段类型
  4. lseek成功但未生效?
  5. coffeeScript学习01
  6. Spring3 MVC+Spring+Spring Jdbc实现的权限管理系统,可以控制到增删改查
  7. firebase登录验证_如何使用Firebase通过三步向身份验证本机添加身份验证
  8. python paas_到底什么是PaaS?——【PaaS概述科普文】
  9. poj 3080 Blue Jeans kmp+枚举
  10. android auto能用酷狗,完美支持Android车载设备,酷狗音乐pad版使用教程
  11. mui 框架图片预览
  12. Pyinstaller 打包Pyside2 报错qt.qpa.plugin
  13. windows 任务栏点击无反应,电脑没有任务栏怎么办
  14. 2021年,第一份值得职场人“跪读”的书单来了
  15. JAVA毕业设计-智慧农业水果销售系统计算机源码+lw文档+系统+调试部署+数据库
  16. 是非人生 — 一个菜鸟程序员的5年职场路 第6节
  17. 如何修改Ubuntu的分辨率
  18. 【科创人】瑞云创始人汪忠田:售后服务SaaS市场拓荒者
  19. 「技术工具」阿里开源Java在线诊断工具 Arthas 进阶教程
  20. 2018年广东工业大学文远知行杯新生程序设计竞赛 1013 在那天的雪停息之前β

热门文章

  1. iOS 给测试人员测试手机APP的四种方法:真机运行(略),打ipa包,(testFlighe)邮件,蒲公英(三)蒲公英
  2. 基于gdal的格网插值
  3. SQLServer性能优化专题
  4. Selenium-鼠标操作
  5. POJ1328Radar Installation
  6. ruby入门tips
  7. 数说:这只程序员组建的乐队为何能进HOT5?
  8. 这 8 个 Python 技巧让你的数据分析提升数倍!
  9. 10个最常见的 HTML5 面试题及答案
  10. Code Snippet 插件 使用——代码高亮