`

Oracle有效建立索引的小技巧

阅读更多
数据库版本:
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE    9.2.0.1.0       Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production

以SCOTT用户的表为例,看一下表DEPT的索引:
SQL> select index_name,column_name,column_position from user_ind_columns where table_name='DEPT';

INDEX_NAME           COLUMN_NAME                              COLUMN_POSITION
-------------------- ---------------------------------------- ---------------
PK_DEPT              DEPTNO                                                 1

分析一下表:
SQL> analyze table dept estimate statistics;
SQL> analyze table emp  estimate statistics;

执行两个查询:
SQL> select deptno,dname from dept;

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=4 Bytes=44)
   1    0   TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=4 Bytes=44)
  
SQL> select e.ename,d.dname from emp e,dept d where d.deptno=e.deptno;

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=14 Bytes=252)
   1    0   HASH JOIN (Cost=5 Card=14 Bytes=252)
   2    1     TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=4 Bytes=44)
   3    1     TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=98)
  
可以看到,两个查询都是全表扫描。如果DEPT表比较小,全表扫描也不错,但数据量大似乎不太好。

建个联合索引,
SQL> create index idx_dept_multi on dept (deptno,dname);

重新分析一下表DEPT,
SQL> analyze table dept estimate statistics;

再执行上面的两个查询。
SQL> select deptno,dname from dept;

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=4 Bytes=44)
   1    0   INDEX (FULL SCAN) OF 'IDX_DEPT_MULTI' (NON-UNIQUE) (Cost=1 Card=4 Bytes=44)
  
SQL> select e.ename,d.dname from emp e,dept d where d.deptno=e.deptno;

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=14 Bytes=252)
   1    0   HASH JOIN (Cost=4 Card=14 Bytes=252)
   2    1    INDEX (FULL SCAN) OF 'IDX_DEPT_MULTI' (NON-UNIQUE) (Cost =1 Card=4 Bytes=44)
   3    1     TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=98)
  
通过执行计划,看到DEPT已经不是全表扫描了,COST也有所降低。对于一个有多个字段的表,如果经常查询的只是其中两、三个字段,如用户表、客户表等,把常用字段一起建一个索引,可以起到不错的效果。
0
2
分享到:
评论

相关推荐

    ORACLE数据库维护技巧

    为了更好地诊断并解决这些问题,本文将分享一系列关于Oracle数据库维护的小技巧,特别是针对Unix环境下的维护实践。 #### 二、操作系统层面的监控与调优 ##### 1. 检查操作系统IO问题 - **工具选择**:`sar`是一个...

    ORACLE_SQL性能优化技巧

    Oracle SQL性能优化是数据库管理中的关键环节...通过理解和应用这些技巧,数据库管理员和开发人员可以有效地优化ORACLE SQL查询,提升系统整体性能。记住,每个数据库环境都有其独特性,最佳实践需要根据实际情况调整。

    ORACLE进阶操作技巧

    ##### 索引建立技巧 - **创建合适的索引**:合理设计索引可以极大地提高查询速度。例如,对于经常作为查询条件的字段,应该考虑创建索引;对于频繁更新的字段,则应避免过多索引,以减少维护成本。 - **索引类型的...

    Oracle数据库基于索引SQL优化方法的研究与实现

    1. **确定建立索引的字段**:一般来说,应该在经常被查询的字段上建立索引。具体来说: - 主键和外键字段。 - 连接操作字段,即经常与其他表进行连接操作的字段。 - WHERE子句中出现频率较高的字段。 - 小字段...

    OracleSQL性能优化技巧

    而在Data Warehousing(数据仓库)系统中,优化重点可能转移到是否利用B*索引、并行SQL查询和PL/SQL函数来提升查询效率,甚至考虑建立并行数据库。 其次,调整应用程序结构设计,如避免不必要的大表全表扫描,可以...

    oracle数据库索引与sql的优化

    - 对于小于5MB的小表,可能不适合建立索引。 #### 二、索引的选择与使用原则 1. **索引选择原则:** - 当查询涉及的数据行小于表数据总量的5%时,使用索引查询效果较好。 - 如果WHERE子句中涉及到的列是经常...

    Oracle经典常用技巧荟萃

    3. Oracle优化数据库的心得:此篇心得分享了如何从不同方面优化Oracle数据库的性能,包括索引优化、SQL语句优化等。优化数据库可以显著提升系统性能,减少查询响应时间。 4. Oracle性能调优!:性能调优是数据库...

    Oracle查询优化改写技巧与案例

    本篇文章将深入探讨Oracle查询优化的一些改写技巧,并结合实际案例进行讲解。 一、索引的合理利用 1. 唯一性索引:为经常用作查询条件的列创建唯一性索引,可以确保查询时快速定位到单条记录,例如主键和唯一约束...

    ORACLE索引与高性能SQL介绍

    通过深入理解Oracle索引和高性能SQL的概念、类型、创建与维护方法以及优化原则和技巧,数据库管理员和开发人员可以更有效地设计和管理数据库,提高系统的整体性能。这不仅涉及到理论知识的学习,更需要在实践中不断...

    oracle 性能优化建议小结

    然而,对于某些数据类型如LONG或LONG RAW,建立索引可能无效。在选择索引时,需要考虑字段的使用频率和数据分布情况。 - **维护成本**:虽然索引可以加速查询,但其创建和维护也会占用存储空间,并在插入、删除和...

    ORACLE基础培训文档

    这篇“Oracle基础培训文档”旨在为初学者提供一个全面了解Oracle数据库的平台,帮助大家掌握其基本概念、操作和管理技巧。 首先,我们从基础开始,Oracle数据库的核心是SQL(结构化查询语言),它是用于管理和处理...

    品悟Oracle性能优化

    函数索引允许基于列的函数结果建立索引;唯一索引则确保索引列的值是唯一的,有助于数据的完整性。 二、索引的选择与设计 选择合适的索引策略是性能优化的重要环节。需要考虑以下因素:查询模式、表的大小、数据...

    Oracle9i数据库的性能优化技巧.pdf

    对于OLTP(在线事务处理)系统,优化关注点在于并发性、可靠性和用户响应速度,需要考虑回滚段的大小、索引和聚集的建立、SGA大小以及SQL语句的效率。而在数据仓库系统中,优化可能涉及采用B-树索引或Bitmap索引,...

    oracle11g32位客户端

    - **连接池使用**:利用连接池技术减少连接建立和断开的时间消耗。 - **内存管理**:合理设置客户端内存参数,避免内存不足导致的问题。 - **网络配置**:调整网络配置,如TCP窗口大小、MTU等,提高网络传输效率。 ...

    oracle性能优化文档

    选择合适的数据类型、使用唯一性约束、建立复合索引、考虑B树和位图索引的适用场景,以及适时重建索引都是索引优化的重要方面。 3. **表设计与分区**: 表的设计直接影响性能。合理划分字段,使用适合的数据类型,...

    Oracle性能优化培训

    - **索引优化技巧** - 避免对索引列进行函数运算,因为这将导致Oracle无法使用索引来加速查询。 - 避免隐式类型转换,确保查询条件与索引列的数据类型一致。 - 使用压缩技术来减少索引占用的空间,降低维护成本。...

    Oracle查询优化案例

    考虑建立单列索引、复合索引、唯一索引和函数索引,但也要注意过度索引可能导致插入、更新和删除操作变慢。 3. **选择合适的连接类型**:内连接、外连接和交叉连接有不同的性能表现。理解何时使用笛卡尔积、自连接...

Global site tag (gtag.js) - Google Analytics