【问题标题】:Subquery is taking much longer then normal子查询花费的时间比正常时间长得多
【发布时间】:2020-09-07 08:44:56
【问题描述】:

我遇到了优化问题。

当我使用这样的查询时:

Select * (around 100 columns)
from x
where RepoDate = '2020-05-18'

大约需要 0.2 秒。

除非我使用这样的查询:

Select * (around 100 columns)
from x
where RepoDate = (select max(RepoDate) from y)

大约需要 1 小时。 表 y 只有日期 (2020-05-17, 2020-05-18, ...)

你能告诉我为什么执行时间有这么大的差异吗?

【问题讨论】:

  • '2020-05-18' 不是 DATE 开头的,因为它是一个字符串。其次,SQL Developer 是一个工具,不确定它与查询性能有什么关系。第三,我们既没有您的table/data 也没有任何explain planperformance metrics 来说明您的查询为什么慢/快/随便
  • 在您提供更多详细信息之前,我们无法给出答案。请阅读this excellent post on asking Oracle tuning questions
  • Y 中有多少行? X 有多少个?这两个执行计划是什么?
  • 你能为查询提供一个解释计划吗?

标签: sql oracle performance oracle10g query-optimization


【解决方案1】:

从技术上讲,您是在将简单的第一个查询与具有另一个子查询的查询进行比较,该子查询可能已经在处理繁重的表“y”。

所以这两个查询一开始就不一样。我们需要有解释计划,首先估算子查询的成本(即行数、索引使用量等),然后再转到父查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多