Oracle sql性能优化调整.pdfVIP

  • 1
  • 0
  • 约3.16万字
  • 约 31页
  • 2026-01-21 发布于河北
  • 举报

Oraclesql性能优化调整

1.访问Table的方式

ORACLE采用两访问表中记录的方式:

a.全表扫描

全表扫描就是顺序地访词表中每条记录.ORACLE采用一次读入多个数据块d(atabaseblock)的方式

优化全表扫描.

b.通过ROWID访问表

你可以采用基于ROWID的访问方式情况,提高访问表的效率,,ROWID包含了表中记录的物理位置信

息..ORACLE采用索引I(NDEX)实现了数据和存放数据的物理位置R(OWID)之间的联系.通常索引提供了快速

访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高.

2.选择最有效率的表名顺序

ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表基(础表

drivingtable)将被最先处理.在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础

表.当ORACLE处理多个表时,会运用排序及合并的方式连接它们.首先,扫描第一个表F(ROM子句中最后的那

个表)并对记录进行派序,然后扫描第二个表F(ROM子句中最后第二个表),最后将所有从第二个表中检索出

的记录与第一个表中适宜记录上行合并.

例如:表TAB116,384条记录

表TAB21条记录

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

selectcount*()fromtabi,:ab2执行时间0.96秒

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

selectcount*()fromtab2,:abl执行时间26.09秒

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

表所引用的表.

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

SELECT*

FROMLOCATIONL,

CATEGORYC,

EMPE

WHEREE.EMP_NOBETWEEN1000AND2000

ANDE.CATNO=C.CATNO

ANDE.LOCN=L.LOCN

将比以下SQL更有效率

SELECT*

FROMEMPE,

LOCATIONL,

CATEGORYC

WHEREE.CAT_NO=C.CAT_NO

ANDE.LOCN=L.LOCN

ANDE.EMP_NOBETWEEN1OOOAND2000

3.WHERE子句中的连接顺序.

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,

那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

例如:

(低效,执行时间156.3秒)

SELECT…

FROMEMPI-

WHERESAL50000

ANDJOB=MANAGER

AND25(SELECTCOUNT(*)FROMEMP

WHEREMGR=E.EMPNO);

(高效,执行时间10.6秒)

SELECT…

FROMEMPE

WHERE25(SELECTCOUNT(*)FROMEMP

WHEREMGR=E.EMPNO)

ANDSAL50000

ANDJOB=MANAGER;

4.SELECT子句中防止使用♦

当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用是一个方便的方法.不幸的是,这

文档评论(0)

1亿VIP精品文档

相关文档