`

创建索引ORACLE 需要做的工作

阅读更多

一. 先来看一下创建索引要做哪些操作:
1index keydata 读到内存
==>如果data 没在db_cache 中,这时候很容易有大量的db file scatter read wait

2index keydata 作排序
==>sort_area_size 或者pga_aggregate_target 不够大的情况下,需要做 disk sort, 会有大量的driect path read/write , 另外,消耗大量CPU Time

3创建新的index segment , 把排过序的index data 写到所创建的index segment 里面
==>如果index 很大,那么,有时也会有redo log 相关等待,如:
log buffer space ,log file sync , log file parallel write 

所以,在建大表索引时,可以增大pga,增大temp tablepace,并且用nologging或并行选项。

如:
create index idx_logs on logs(time) nologging parallel 4;

 

并行度一般看CPU 个数。当然在CPU 比较空闲的情况下可以多并行几个。对于单CPU 不建议用并行,这样反而会增加创建时间。也可以根据v$session_wait 的资料,做针对性的tuning , 这样可以降低点时间

 

补充知识:

查看cpu 信息:more /proc/cpuinfo

查看内存信息:more /proc/meminfo

查看操作系统信息:more /etc/issue

 

有关索引概念性的东西,请参考我的Blog

 

Oracle 索引 详解

http://blog.csdn.net/tianlesoftware/archive/2010/03/05/5347098.aspx

 

 

 

 

 

二. 测试

 

自己也测试了下。测试环境:Oracle 11g R2, win7 64bit ,CPU T6670 2.2G 双核内存:4G。 

 

 

1. 查看表的数据量:

SQL> select count(*) from custaddr;

 

  COUNT(*)

----------

   7230464

 

2. 查看现有索引:

SQL> select index_name,index_type from user_indexes where table_name='CUSTADDR';

 

INDEX_NAME                     INDEX_TYPE

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

PK_CUSTADDR_TP_723             NORMAL

IX_CUSTADDR_ADDRABB_TP         NORMAL

IX_CUSTADDR_TEAMID_TP          NORMAL

IX_CUSTADDR_CUSTID_TP          NORMAL

IX_CUSTADDR_COMPABB_TP         NORMAL

IX_CUSTADDR_AREACODE           NORMAL

IX_CUSTADDR_ADDR_TP            NORMAL

 

已选择7行。

3. 删除索引:IX_CUSTADDR_CUSTID_TP


SQL> drop index IX_CUSTADDR_CUSTID_TP ;

索引已删除。

4. 默认方式创建索引:


SQL> SET timing on;

SQL> CREATE INDEX  IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID );

索引已创建。

已用时间:  00: 00: 48.37

单位:s

5. nologging 模式:
SQL> drop index IX_CUSTADDR_CUSTID_TP ;

索引已删除。

已用时间:  00: 00: 00.09
SQL> CREATE INDEX  IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID )  NOLOGGING;

索引已创建。

已用时间:  00: 00: 34.46

 

6. Nologging+ parallel 模式

SQL> drop index IX_CUSTADDR_CUSTID_TP ;

索引已删除。

已用时间:  00: 00: 00.17

SQL> CREATE INDEX  IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID )  NOLOGGING PARALLEL 2;

索引已创建。

已用时间:  00: 00: 52.56

SQL> drop index IX_CUSTADDR_CUSTID_TP ;

索引已删除。

已用时间:  00: 00: 00.07

SQL> CREATE INDEX  IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID )  NOLOGGING PARALLEL 4;

索引已创建。

已用时间:  00: 00: 53.44

 

看来在单CPU上,并行效果还不好

 

7. Parallel 模式

SQL> drop index IX_CUSTADDR_CUSTID_TP ;

索引已删除。

已用时间:  00: 00: 00.02

SQL> CREATE INDEX  IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID ) PARALLEL 2;

索引已创建。

已用时间:  00: 00: 49.97

SQL> drop index IX_CUSTADDR_CUSTID_TP ;

索引已删除。

已用时间:  00: 00: 00.02

SQL> CREATE INDEX  IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID ) PARALLEL 4;

索引已创建。

已用时间:  00: 00: 50.25

 


从上面的测试数据可以看出,700万的数据,建索引,也在1分钟以内。 但是并行在单CPU上效果不明显,而且比光使用NOLOGGING还要慢,因为出现资源争用了,可能是CPU的争用,也可能是I/O的争用。

 

 

 

 

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

Blog: http://blog.csdn.net/tianlesoftware 

网上资源: http://tianlesoftware.download.csdn.net 

相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 

DBA1 群:62697716(); DBA2 群:62697977

分享到:
评论

相关推荐

    数据库 创建索引 sql oracle

    "数据库创建索引SQL Oracle" 数据库索引是数据库性能优化的重要手段之一。创建索引可以提高查询速度,降低数据库的负载,提高数据的安全性。本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面...

    oracle在线创建索引和重组索引

    Oracle 在线创建索引和重组索引是数据库管理员经常需要处理的问题。在线创建索引可以提高查询性能,而重组索引可以减少索引的碎片化和空间浪费。下面我们将详细介绍在线创建索引和重组索引的步骤和注意事项。 一、...

    [Oracle]如何在亿级记录表中创建索引

    #### 二、创建索引前的准备工作 在创建索引之前,了解表的基本结构和特性是非常重要的。这有助于确定最佳的索引策略。 ##### 1. 查看表是否为分区表及其分区详情 首先,需要确认表是否被分区,以及具体的分区情况。...

    oracle创建表创建唯一索引

    在Oracle数据库管理系统中,创建表和唯一索引是数据库设计中的关键步骤,它们对于数据的组织、查询效率和数据完整性至关重要。以下将详细介绍如何创建学员信息表,创建唯一索引,以及如何修改表来添加主键和检查约束...

    oracle、sql数据库批量建索引

    因此,在设计数据库时,应谨慎选择需要创建索引的列,通常选择在查询中频繁作为WHERE子句条件的列。 在大数据量的场景下,索引的维护成本会增加,但其带来的查询性能提升往往抵消了这一成本。索引类型的选择也非常...

    Oracle 创建索引的基本规则

    ### Oracle 创建索引的基本规则 在Oracle数据库管理中,创建合适的索引对于提高查询效率、减少数据处理时间具有重要作用。本文将围绕Oracle创建索引的基本规则进行深入探讨,旨在帮助读者更好地理解如何根据不同的...

    oracle海量数据中提升创建索引的速度.docx

    "Oracle 海量数据中提升创建索引的速度" Oracle 海量数据中提升创建索引的速度是指在 Oracle 数据库中,特别是在海量数据的情况下,如何提高创建索引的速度。创建索引是数据库优化中的重要步骤,但是在海量数据的...

    oracle 创建和删除索引

    通过创建索引,可以显著提升查询性能,尤其是在处理大型数据表时更为明显。索引类似于书籍中的目录,能够帮助数据库快速定位到所需的数据行。 #### 二、创建索引 根据提供的描述,创建索引的具体命令为: ```sql ...

    Oracle在线建立超大表的索引

    为了理解如何优化创建索引的过程,首先需要了解Oracle创建索引时涉及的主要I/O操作: 1. **RA**:对源表加X类型的表级DDL锁。 2. **RB**:读取源表数据块的I/O。 3. **RC**:索引键排序,如果内存中无法容纳所有的...

    oracle创建索引规律总结

    oracle创建索引很好的参考资料,好的索引能够非常大的提高数据库的查询速度

    Oracle为sdo_geometry创建空间索引

    Oracle 中创建空间索引的实现步骤和注意事项 空间索引是 Oracle 中的一种特殊索引类型,用于加速空间数据的查询和检索。空间索引可以大大提高空间数据的查询效率,特别是在处理大量空间数据时。本文将详细介绍如何...

    Oracle索引(创建技巧)

    Oracle索引的创建、简介、技巧,希望可以给学习Oracle的人带来帮助!

    oracle创建表,索引,表空间,触发器,schema用户,序列的Sql文

    2. **创建索引**:索引用于提高数据查询的效率。Oracle支持B树索引、位图索引等多种类型。例如,为EmployeeID创建索引: ```sql CREATE INDEX idx_employee_id ON Employees(EmployeeID); ``` 这条语句创建了一...

    postgresql和oracle创建空间索引

    标题中的“postgresql和oracle创建空间索引”涉及的是在两种主流的关系型数据库管理系统(RDBMS)中,如何为地理空间数据创建索引的技术。在处理包含地理信息的数据时,如地图坐标、地理位置等,空间索引能显著提高...

    oracle 索引创建.ppt

    综上所述,Oracle数据库的索引创建是一个涉及多个方面的工作,需要综合考虑数据量、查询模式、空间利用率等因素,以确保系统的高效运行。在实际操作中,根据具体业务需求,合理创建和管理索引是提升数据库性能的关键...

    Oracle索引的访问方法,如何创建索引、查询索引、使用索引

    创建索引时,需要指定索引的名称、所在表空间、存储空间、initial extent、next extent、pctincrease等参数。 例如,创建一个主键索引: ```sql CREATE TABLE insured_autos ( policy_id NUMBER, vin VARCHAR2(40...

    oracle约束和索引笔记

    - **函数索引(Function-Based Index)**: 允许基于函数的结果创建索引,使得对函数结果的查询能利用索引。 - **唯一索引(Unique Index)**: 确保索引键的唯一性,与唯一约束相似,但不强制非空。 - **分区索引...

    Oracle创建索引要做到三个适当.doc

    然而,创建索引并非简单的操作,而是一项需要深入理解和精心规划的工作。正如文档标题“Oracle创建索引要做到三个适当”所强调的,创建索引需要遵循“适当”的原则,具体包括在适当的表上、适当的列上创建适当数量的...

    oracle 索引创建

    ##### 创建索引的一般语法如下: ```sql CREATE INDEX index_name ON table_name (column_name); ``` 这里假设我们有一个名为`employees`的表,其中包含一个名为`employee_id`的列,我们可以创建一个名为`idx_...

    ORACLE索引详解及SQL优化

    创建索引有多种方式,如使用`CREATE INDEX`语句,例如: ```sql CREATE INDEX idx_employee_name ON employees(last_name); ``` 这将在`employees`表的`last_name`列上创建一个索引,使得按照员工姓氏查找变得高效。...

Global site tag (gtag.js) - Google Analytics