performance - 为什么 PLSQL 比 SQL*Plus 慢

标签 performance oracle plsql

我有几个通过 SQL*PLUS 运行时性能良好的 Oracle 查询。然而,当它们作为 PL/SQL 包的一部分执行时,它们需要更长的时间。

我们的 DBA 观察到这些查询通过 PLSQL 需要 10 分钟,而通过 SQL*Plus 需要 10 秒。

有人对在哪里寻找错误配置有任何指示吗?

客户端 - Windows 2000
服务器 - Linux (Oracle Enterprise)

谢谢

--

解析度:

我希望我能接受每个人的答案。其中有几个非常有帮助。

  • 该查询正在转换数据类型。
  • 执行计划不匹配。
    (提示已修复。)
  • DBA 正在查看光标所在的时间
    打开而不是查询时间。
  • 最佳答案

    使用 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/

    相关文章:

    performance - 在 Apache Spark 上迭代运行查询

    c++ - vector<bool> 和数组之间的性能差距

    ruby-on-rails - Ruby on Rails与Oracle Objects(以及一般面向对象的数据持久性)

    sql - 使用外键创建表

    oracle - 在 PLSQL 中使用嵌套函数的正确方法是什么?

    sql - 序列生成的主键似乎不能很好地与 select 语句配合使用

    javascript - APEX:如何实现循环级联选择列表(多对多)

    javascript - 我不需要相关函数的返回值,哪种方法在系统运行时更快,是否使用返回值?

    oracle - 如何以编程方式将查询的源表重新映射到另一个表

    java - 初始化 Spring 应用程序时如何确定哪个方法花费了这么长时间