设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 | 论坛社区
当前位置:首页 >> 数据库 >> Oracle >> 正文
最新信息
·Oracle数据库取消8080端口…
·优化Oracle库表设计的若干…
·ORACLE SQL性能优化系列(…
·ORACLE SQL性能优化系列(…
·ORACLE SQL性能优化系列(…
·ORACLE SQL性能优化系列(…
·大家看看如何用asp操作Ora…
·Oracle 安装的时候java环境…
·windows环境下的oracle服务
·关于oracle的备份策略
资料搜索
热点信息
·Oracle数据导入导出详解
·如何取得一个表的所有字段…
·oracle架构的基础知识
·Oracle数据库的备份及恢复…
·今天通过修改Oracle 数据库…
·Oracle数据库取消8080端口…
·Oracle数据库日常维护
·数据库安全性策略
·Oracle 安装的时候java环境…
·ORACLE SQL性能优化系列(…
推荐信息
·windows环境下的oracle服务
·Oracle数据导入导出详解
·Oracle数据库的备份与恢
·oracle架构的基础知识
·Oracle数据库的备份及恢复…



Google
 
ORACLE SQL性能优化系列(三)
〖编辑:Cloudy | 浏览:人次〗

4. 选择最有效率的表名顺序(只在基于规则的优化器中有效)

ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.


例如:

     表 TAB1 16,384 条记录

     表 TAB2 1      条记录

     选择TAB2作为基础表 (最好的方法)

     select count(*) from tab1,tab2   执行时间0.96秒

    选择TAB2作为基础表 (不佳的方法)

     select count(*) from tab2,tab1   执行时间26.09秒


如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.


例如:


   EMP表描述了LOCATION表和CATEGORY表的交集.


 SELECT *


FROM LOCATION L ,


      CATEGORY C,

      EMP E

WHERE E.EMP_NO BETWEEN 1000 AND 2000


AND E.CAT_NO = C.CAT_NO


AND E.LOCN = L.LOCN

 

将比下列SQL更有效率

 

SELECT *


FROM EMP E ,

LOCATION L ,

      CATEGORY C

WHERE  E.CAT_NO = C.CAT_NO

AND E.LOCN = L.LOCN

AND E.EMP_NO BETWEEN 1000 AND 2000


录入时间:2007-03-30 11:02:20 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2008 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号