【问题标题】:Case when query taking very long time even when no records found即使没有找到记录,查询也需要很长时间的情况
【发布时间】:2019-03-09 03:32:12
【问题描述】:

当我们需要两个日期中的最大值作为审核日期时的任何替代方案 如何优化它。

SELECT 
  a.code,a.name,b.token,a.last_updated,b.last_updated, 
  CASE WHEN a.last_updated >= nvl(b.last_updated, a.last_updated) THEN 
  a.last_updated ELSE b.last_updated END AS currdate 
FROM 
  table1 a LEFT JOIN table2 b ON (a.code = b.code 
    AND b.last_updated > '03/10/2018 13:21:37') 
WHERE 
  a.ou_code IN 
  (SELECT ou_code FROM table1 WHERE last_updated > '03/10/2018 13:21:37') 
  OR (b.last_updated > '03/10/2018 13:21:37') 
ORDER BY currdate

【问题讨论】:

  • 删除OR (b.last_updated > '03/10/2018 13:21:37') 。这是多余的。

标签: sql oracle optimization max


【解决方案1】:

我会假设您的表没有正确的索引。如果可以的话,我会补充:

create index ix1 on table2 (code, last_updated);

create index ix2 on table1 (last_updated);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2016-02-02
    • 2018-01-09
    相关资源
    最近更新 更多