我有几个通过 SQL*PLUS 运行时性能良好的 Oracle 查询。然而,当它们作为 PL/SQL 包的一部分执行时,它们需要更长的时间。
我们的 DBA 观察到这些查询通过 PLSQL 需要 10 分钟,而通过 SQL*Plus 需要 10 秒。
有人对在哪里寻找错误配置有任何指示吗?
客户端 - Windows 2000
服务器 - Linux (Oracle Enterprise)
谢谢
--
解析度:
我希望我能接受每个人的答案。其中有几个非常有帮助。
(提示已修复。)
打开而不是查询时间。
最佳答案
使用 SQL 跟踪查看每种情况下的执行计划。想到的一种可能性(根据经验):包是否将错误类型的值绑定(bind)到查询?可能是在 SQL Plus 中您正在运行:
select * from mytable where id = '1234';
但在 PL/SQL 中,您正在运行:
select * from mytable where id = p_id;
p_id 被定义为一个数字。这将在 ID 列上强制 TO_NUMBER 并阻止 Oracle 使用索引。
关于performance - 为什么 PLSQL 比 SQL*Plus 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1682339/