oracle性能优化系列学习二

oracle性能优化系列学习二
您正在学习的Oracle课程是:Oracle SQL性能优化系列。
4。选择最有效的表名称顺序(仅在基于规则的优化器中有效)

Oracle解析器按照从左到右的顺序,在from子句中的from子句中包含一个表,因此在表的结尾(基于表驱动表)将首先处理。在from子句包含多个表时,必须在表作为基础时选择表中的记录数。连接它们的表Oracle将使用排序和合并方法。首先,扫描第一个表(在最后一个语句的from子句中)和记录发送顺序,然后扫描第二个表(最后一个二米中的from子句),第二个从记录中的检索表,以及相应记录中的第一个表合并。

例如:

表16384记录表

表1对记录

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

select count(*)从表,对执行时间0.96秒

选择TAB2作为基表(差法)

select count(*)从表2,表执行时间26.09秒

如果有超过3个表连接查询,我们需要选择交叉表(交集表)作为基表,而交叉表是指其他表引用的表。

例如:

EMP表描述位置表和类别表的交集。

*选择

从位置L,

C类,

EMP E

在1000和2000之间的e.emp_no

和e.cat_no = c.cat_no

AND E.LOCN = L.LOCN

它比下面的SQL更有效

*选择

来自EMP E,

位置L,

C类

在e.cat_no = c.cat_no

和e.locn = l.locn

1000和2000之间e.emp_no

5中的连接顺序。WHERE子句。

Oracle使用自底向上序列解析WHERE子句。根据这个原则,表之间的连接必须写在其他条件之前。可以筛选出最多记录数的条件必须写在WHERE子句的结尾处。

例如:(低效,执行时间156.3秒)

选择…

从EMP E

萨尔50000

工作=经理

和25 <(从EMP中选择计数(*)

在MGR = e.empno);

(效率高,执行时间10.6秒)

选择…

从EMP E

其中25 <从EMP中选择计数(*)

在MGR = e.empno)

萨尔50000

工作=经理;

避免在6中使用*。SELECT子句。

当您想列出SELECT子句中的所有列时,使用动态SQL列引用*是一种方便的方法。不幸的是,这是一种非常低效的方式。事实上,Oracle在解析过程中,将*转换为所有的名称,这是通过查询数据字典来完成的,这意味着会有更多的时间消耗。

7。减少访问数据库的次数

在执行每个SQL语句时,Oracle在内部执行许多任务:解析SQL语句、估算索引利用率、绑定变量、读取数据块等。可以看出,减少访问数据库的数量实际上可以减少Oracle的工作量。

例如,有三种方法可以检索雇员人数等于0342或0291的雇员。

方法1(效率最高)

选择emp_name,工资等级

从EMP

在emp_no = 342;

选择emp_name,工资等级

从EMP

在emp_no = 291;

方法2(次低效率)

声明

光标C1(e_no号)

选择emp_name,工资等级

从EMP

在emp_no = e_no;

开始

打开C1(342);

把C1输入……,;

的…

打开C1(291);

把C1输入……,;

关闭C1;

结束;

方法3(高效率)

选择a.emp_name,A.SALARY,a.grade,

b.emp_name,B.SALARY,b.grade

来自EMP A,EMP B

在a.emp_no = 342

和b.emp_no = 291;

注意{ 1 } { 2 }下一页正在查看Oracle教程:Oracle SQL性能优化系列学习二:意大利:

在SQL*Plus复位arraysize参数、SQL Forms和PRO*C能提高检索的数据为每个数据库的访问量,并建议值是200。
{ 1 } { 2 }的最后一页

tag:学习性能优化系列电脑软件Oracle

相关内容