讨论Oracle Exists用法

数据库 Oracle
这里介绍用Oracle Exists替换DISTINCT,当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT。

学习Oracle时,经常会遇到Oracle Exists问题,这里将介绍Oracle Exists问题的解决方法。Oracle使用了一个复杂的自平衡B-tree结构。通常,通过索引查询数据比全表扫描要快。当 Oracle找出执行查询和Update语句的最好路径时,Oracle优化器将使用索引。同样在联结多个表时使用索引也能够提高效率。

另一个使用索引的好处是,他提供了主键(primary key)的唯一性验证。那些LONG或LONG RAW数据类型, 您能够索引几乎任何的列。通常, 在大型表中使用索引特别有效. 当然,您也会发现, 在扫描小表时,使用索引同样能提高效率。

虽然使用索引能得到查询效率的提高,但是我们也必须注意到他的代价。索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时, 索引本身也会被修改。这意味着每条记录的INSERT,DELETE ,UPDATE将为此多付出4、5次的磁盘I/O 。因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢。定期的重构索引是有必要的:

  1. ALTER INDEX <INDEXNAME> REBUILD <TABLESPACENAME> 

用Oracle Exists替换DISTINCT:

当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT。一般能够考虑用Oracle EXIST替换,Oracle Exists使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立即返回结果。例子:

  1. SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E WHERE D.DEPT_NO = E.DEPT_NO 
  2. SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE Exists 
    ( SELECT ‘X' FROM EMP E WHERE 
    E.DEPT_NO = D.DEPT_NO); 

◆SQL语句用大写的;因为Oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。
◆在Java代码中尽量少用连接符“+”连接字符串。
◆避免在索引列上使用NOT通常,我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的影响。
◆当Oracle“碰到”NOT,他就会停止使用索引转而执行全表扫描。
◆避免在索引列上使用计算。WHERE子句中,假如索引列是函数的一部分。优化器将不使用索引而使用全表扫描。

【编辑推荐】

  1. 详谈Oracle LogMiner工具
  2. 揭开Oracle LogMiner之谜
  3. 简单描述Oracle Clob类型
  4. 概述Oracle 10g服务器
  5. 简介Oracle xmltype
责任编辑:佚名 来源: 计世网
相关推荐

2009-11-13 16:53:12

Oracle文档

2009-11-20 15:19:29

Oracle Agil

2009-11-17 15:59:25

Oracle物化视图

2010-05-04 18:14:50

Oracle 性能工具

2009-11-20 13:29:59

Oracle数据库恢复

2010-04-23 09:13:08

Oracle In-M

2010-10-27 15:03:47

Oracle with

2010-04-28 17:29:07

Oracle字符集

2011-04-12 11:32:31

Oraclerownum用法

2010-10-25 16:52:48

oracle管道函数

2010-10-25 14:28:53

oracle trun

2010-04-29 16:06:47

Oracle rown

2010-04-16 16:41:53

rownum用法

2010-04-08 16:41:29

Oracle存储过程

2010-05-04 12:10:08

Oracle over

2010-04-30 10:47:26

Oracle Nvl函

2010-04-28 16:30:52

Oracle case

2010-04-30 11:58:45

Oracle sequ

2010-04-28 14:56:02

Oracle sqlp

2010-04-26 15:30:45

Oracle join
点赞
收藏

51CTO技术栈公众号