【问题标题】:Why variable comparison is running slow?为什么变量比较运行缓慢?
【发布时间】:2019-11-09 15:17:45
【问题描述】:

我的一个过程调用调用函数并将返回值绑定到变量。请看下面:

此查询正在过程中执行。

旧查询

--lc_tmp_year  is variable declare at procedure level
--this call taking 3 secs to execute
lc_tmp_year = EmpPackage.GetEmployeeCodeYear(emp_id);

select * from employeePlans
where code_year = lc_tmp_year;

新查询

--this running faster than the above one - within secs
select * from employeePlans
where code_year = EmpPackage.GetEmployeeCodeYear(emp_id);;

我很惊讶为什么新查询比旧查询运行得更快。

有人知道吗?

【问题讨论】:

  • 请提供有关表大小和执行计划的信息。

标签: sql oracle11g query-optimization


【解决方案1】:

嗯,可能是新查询中的查询优化器可以看到与 employee 的关系 并且能够通过内部内部连接,在幕后进行优化,并且能够使用可能的索引。在旧查询中,纯值 lc_tmp_year 存在于 select 语句中,在某些不好的情况下,它基本上执行整个 employeePlans 关系的顺序比较,或者至少在未使用的索引选项的情况下正如在新查询中使用的那样,最后意味着新查询的更好结果。 当然,这一切都取决于创建数据库和特定关系的 DDL 语句,但是,如果你有这样的结果,这可能是解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多