博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

h0ng123 linux,oracle.unix

---在蓝天白云下自由飞翔 爱生活,爱CU---
Google


学习shell脚本编程的好地方
   h0ng123.cublog.cn
关于作者  
姓名:h0ng
职业:计算机
年龄:24
位置:广东
个性介绍:学习网络技术,UNIX/linux 系统管理.娱乐


我的分类  




Oracle语句优化规则汇总(4)
  1. 使用表的别名(Alias)
  当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上。这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。
  (Column歧义指的是由于SQL中不同的表具有相同的Column名,当SQL语句中出现这个Column时,SQL解析器无法判断这个Column的归属)
  2. 用EXISTS替代IN
  在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率。
  低效:
  SELECT*
  FROMEMP(基础表)
  WHEREEMPNO>0
  ANDDEPTNOIN(SELECTDEPTNO
  FROMDEPT
  WHERELOC=‘MELB’)
  高效:
  SELECT*
  FROMEMP(基础表)
  WHEREEMPNO>0
  ANDEXISTS(SELECT‘X’
  FROMDEPT
  WHEREDEPT.DEPTNO=EMP.DEPTNO
  ANDLOC=‘MELB’)
  (相对来说,用NOT EXISTS替换NOT IN 将更显著地提高效率,下面将指出)
  3. 用NOT EXISTS替代NOT IN
  在子查询中,NOT IN子句将执行一个内部的排序和合并。 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.
  例如:
  SELECT…
  FROMEMP
  WHEREDEPT_NONOTIN(SELECTDEPT_NO
  FROMDEPT
  WHEREDEPT_CAT=’A’);
  为了提高效率。改写为:
  (方法一: 高效)
  SELECT….
  FROMEMPA,DEPTB
  WHEREA.DEPT_NO=B.DEPT(+)
  ANDB.DEPT_NOISNULL
  ANDB.DEPT_CAT(+)=‘A’

·Oracle语句优化规则汇总(4)

 发表于: 2008-04-17,修改于: 2008-04-17 20:48 已浏览330次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.03

京ICP证041476号