当前位置:  数据库>oracle

Oracle有效建立索引的小技巧

    来源: 互联网  发布时间:2017-04-20

    本文导语: 数据库版本: 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...

数据库版本
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也有所降低。对于一个有多个字段的表,如果经常查询的只是其中两、三个字段,如用户表、客户表等,把常用字段一起建一个索引,可以起到不错的效果
































































    
 
 

您可能感兴趣的文章:

  • Oracle与Mysql主键、索引及分页的区别小结
  • 从Oracle的约束到索引
  • Oracle 9i轻松取得建表和索引的DDL语句
  • Oracle9i取得建表和索引的DDL语句
  • oracle10g全文索引自动同步语句使用方法
  • Oracle建立二进制文件索引的方法
  • 在Oracle 10g中如何获得索引的专家建议
  • Oracle全文索引设置
  • 用Oracle 9i全索引扫描快速访问数据
  • Oracle中如何把表和索引放在不同的表空间里
  • Oracle索引存储关系到数据库的运行效率
  • Oracle索引聚簇表的数据加载
  • 在Oracle中监控和跟踪索引使用情况
  • oracle 索引的相关介绍(创建、简介、技巧、怎样查看) .
  • Oracle中检查是否需要重构索引的sql
  • 轻松取得Oracle 9i建表和索引DDL语句
  • 深度揭露Oracle索引使用中的限制
  • Oracle索引(B*tree与Bitmap)的学习总结
  • oracle 索引不能使用深入解析
  • SQL Server和Oracle数据库索引介绍
  • 在线等待:用子线程与ORACLE数据库建立连接的问题。
  • oracle数据库在客户端建立dblink语法
  • Oracle 自增(auto increment) 或 标识字段的建立方法
  • Linux上建立第二个ORACLE实例分析
  • 为什么在安装oracle9i在最后建立数据库时出现以下问题(解决立即给分,重谢)
  • Oracle 建立临时表语法及使用技巧
  • Oracle Database 建立与查询 Sequence
  • 建立oracle11G数据库
  • java中建立oracle连接的问题(oci和thin方式的区别、优劣?)
  • Oracle建立DBLINK的详细步骤记录
  • 在win 2000企业版上怎样建立jsp的环境?(使用oracle9数据库或mysql)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • oracle 技巧学习笔记
  • 技巧分享 删除Oracle10G中的垃圾表
  • Oracle 数据库操作技巧集
  • [小技巧]手工扩大Oracle数据库表空间的方法
  • Oracle认证的技巧
  • Oracle技巧分享
  • ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享
  • 小技巧 Oracle杀死死锁进程问题的解决
  • 技巧学习 在Python环境下连接Oracle数据库
  • 技巧分享 Oracle数据库的启动和关闭
  • Oracle Form中COMMIT的概述及使用技巧
  • Hibernate Oracle sequence的使用技巧
  • 保持Oracle数据优良性能的技巧分享
  • oracle数据库自动备份技巧
  • oracle—SQL技巧之(一)连续记录查询sql案例测试
  • Oracle数据库的空间管理技巧
  • oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起
  • Oracle数据库中的字符处理技巧总结
  • 通过JDBC连接oracle数据库的十大技巧
  • Oracle Decode()函数使用技巧分享
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle Decode()函数使用技巧分享 iis7站长之家
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,