查询是

SELECT DISTINCT A.X1, A.X2, A.X3, TO_DATE(A.EVNT_SCHED_DATE,'DD-Mon-YYYY') AS EVNT_SCHED_DATE,
               A.X4, A.MOVEMENT_TYPE, TRIM(A.EFFECTIVE_STATUS) AS STATUS, A.STATUS_TIME, A.TYPE, 
               A.LEG_NUMBER,
               CASE WHEN A.EFFECTIVE_STATUS='BT' THEN 'NLT'
                    WHEN A.EFFECTIVE_STATUS='NLT' THEN 'NLT'
                    WHEN A.EFFECTIVE_STATUS='MKUP' THEN 'MKUP'
               END  AS STATUS
FROM PHASE1.DY_STATUS_ZONE A
WHERE A.LAST_LEG_FLAG='Y'
                   AND SCHLD_DATE>='01-Apr-2019'--TO_DATE(''||MNTH_DATE||'','DD-Mon-YYYY') 
                AND SCHLD_DATE<='20-Feb-2020'--TO_DATE(''||TILL_DATE||'','DD-Mon-YYYY') 
                AND A.MOVEMENT_TYPE  IN ('P')
                AND (EXCEPTIONAL_FLAG='N' OR EXCEPTION_TYPE='5') ---------SS

PHASE1.DY_STATUS_ZONE里面有710246条记录,请问这个查询可以优化吗?

#1楼 票数:0

您可以尝试添加一个涵盖WHERE子句的索引:

CREATE INDEX idx ON PHASE1.DY_STATUS_ZONE (LAST_LEG_FLAG, SCHLD_DATE, MOVEMENT_TYPE,
    EXCEPTIONAL_FLAG, EXCEPTION_TYPE);

根据您数据的基数,可能会或可能不会使用上述索引。

#2楼 票数:0

问题可能是select distinct 这可能很难优化,因为它会删除重复项。 即使没有重复的行,Oracle 仍然会完成这项工作。 如果不需要,请将其删除。

对于您的特定查询,我会将其写为:

WHERE A.LAST_LEG_FLAG = 'Y' AND
      SCHLD_DATE >= DATAE '2019-04-01 AND
      SCHLD_DATE <= DATE '2020-02-20' AND
      A.MOVEMENT_TYPE = 'P' AND
      EXCEPTIONAL_FLAG IN ('N', '5')

日期格式不会影响性能。 只是可读性和可维护性。

对于此查询,最佳索引可能是: (LAST_LEG_FLAG, MOVEMENT_TYPE, SCHLD_DATE, EXCEPTIONAL_FLAG) 如果EXCEPTIONAL_FLAGSCHLD_DATE更具选择性,则可能会切换最后两列。

但是,如果这会返回很多行,那么SELECT DISTINCT将是查询的门控因素。 这更难优化。

  ask by radha translate from so

未解决问题?本站智能推荐:

6回复

如何优化以下删除SQL查询?

我在oracle中有以下delete查询。 一次大约有1000条记录要从数据库中删除。 我已在查询中使用“中”。 有没有更好的方法来编写此查询?
4回复

如何找到以下SQL查询?

SQL数据库中有一个表,称为玩家:玩家(ID,姓名,年龄,性别,得分),其中ID是主键。 现在,我想编写一个查询来查找以下结果:对于每个年龄,找到该年龄所有球员中得分最高的球员的姓名和年龄。 我写了以下查询: 但是,以上查询的结果是所有年龄段(而不是每个年龄段)的所有球员中得分最高的
3回复

优化SQL查询

我有一个SQL查询,该查询对两个表分别具有> 50M行的表执行INNER JOIN。 我希望通过减少基于其中一个表中存在的列的连接行来减少搜索连接所花费的时间。 假设我有带有列A,B,C的表1和带有列A,D,E的表2。 我希望基于A列进行联接,但仅对表2的E列具有值“ e”的行进行
1回复

优化SQL查询

这是我一直在使用的查询。 在这里,我使用2个子查询,但是它们具有相同的where条件。.查找时间加倍。.有没有一种方法可以将整个查询优化为单个子查询? 提前致谢
1回复

如何优化太慢的SQL查询

我需要我的查询每周运行一次,但它需要很长时间(每次执行大约一小时)。 庞大的信息量使其运行时间很长,但我想知道如何优化它。 我是 SQL 新手。 这是我的要求: 我在 spring 批处理的读取部分选择了所有这些数据,以便能够将其写入文件。 这是数据库模型:数据库模型数据库不是我的,所以我不能修改数
2回复

sql查询优化

请比较以下内容: 与 有人告诉我,第一种情况已经过优化。 但是你知道,我不明白为什么会这样。 据我了解,第二个示例应该运行得更快。 我们使用Oracle,但我认为目前没有关系。 请解释我是否错。 谢谢
2回复

如何优化此SQL查询的性能

我需要找到每一天的年龄,但是我需要在一个查询中找到所有以前的日期。 因此,我使用了以下查询: 我得到的输出(日期和年龄)正确无误: 现在,我需要计算每天的平均年龄 ,因此在以下查询中添加了平均年龄 : 这个查询正确吗? 当我向该查询添加聚合函数(avg)时,它需要1个小时来检索数
3回复

如何优化此SQL查询

此查询花费了超过4 minutes ,我想使其运行更快。 请提供任何建议 函数Z_Id_Cpt_To_Val ()是导致问题的原因,它在此SQL中针对所有查询运行,因此需要很长时间 因为如果我退出最后2行,此sql将在3 secondes给出结果 因此,任何优化方案 谢谢