Oracle数据库的优化
2.8避免在SQL里使用PL/SQL功能调用
对于增加PL/SQL的使用,许多用户试图利PL/SQL功能的优势产生可重复使用的代码。其中一个强迫重复使用PL/SQL功能的方法是在SQL语句里使用。例如,可以创建一个将国际货币转换为US$的函数。这个函数称为US$。示例如下:
select transaction_type, US$ (amount, currency)
from international_transaction
where US$ (amount, currency) > 1000;
执行前面的SQL语句没有所期望的那样好。在测试时,它的性能大约比下面得出相同结果的SQL语句慢大约几十倍。
select transaction_type,
amount*exchange_rate US$
from exchange_rate er, international_transaction it
where er.currency = it.currency
and amount*exchange_rate > 1000;
响应时间不同的原因是混合PL/SQL和SQL时,Oracle使用的机制不同。在SQL查询里嵌入PL/SQL功能时,在执行时,Oracle将调用分成两部分:用带有赋值变量的SQL语句代替功能调用以及对每一个函数调用的无名PL/SQL块。
select transaction_type, :a1
from international_transaction
where :a1 > 1000
和
BEGIN
:a1 := US$ (:amount, :currency);
END
对在international_transaction表里的每一行,将执行在前面示例里显示的无名块两次。无名块调用导致查询响应时间的剧增。应该避免在SQL语句里使用PL/SQL功能调用。
参考文献
[1] 瓮正科,王新英著.Oracle8.X For Windows NT实用教程[M].北京:清华大学出版社,1999.
[2] 萨师萱,王珊著.数据库系统概论[M]. 北京:高等教育出版社,2000.2.
[3] Eyal Aronoff,Kevin Loney,Noorali Sonawalla著, 李逸波、王华驹、马赛红、曲宁等译.Oracle8性能优化和管理手册[M].北京:电子工业出版社,2000.1.
[4] Peter Koletzke,Dr.Paul Dorsey著, 刘晓霞、孙登峰、曲京、何粼等译.Oracle Designer信息系统开发[M].
北京:机械工业出版社,1999.8
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论