OracleSQL性能优化系列介绍(上)(2)

文章作者 100test 发表时间 2007:03:14 13:59:55
来源 100Test.Com百考试题网


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

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

例如:

表 TAB1 16,384 条记录。

表 TAB2 1 条记录。

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

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

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

0select 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


相关文章


Oracle数据库中回滚监视的深入探讨
SQLServer和Oracle数据锁定比较
OracleJob任务异常原因分析及其解决(1)
Oracle基于Client_Server的性能调整
OracleSQL性能优化系列介绍(上)(2)
Oracle10g中SCN与TimeStamp的相互转换
OracleSQL性能优化系列介绍(上)(3)
Oracle数据库中改善的表空间管理
Win2003Server重新安装Oracle9i
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛