Sql 如何在Oracle中加快Select语句的速度

Sql 如何在Oracle中加快Select语句的速度,sql,oracle,query-optimization,Sql,Oracle,Query Optimization,我写了一个查询来查找给定时间段内一个子代的金额,它运行得很快: SELECT FILIAL_CODE, sum(sum_eqv)/100 AS summa FROM table WHERE substr(acc,1,5) = '65434' and cast(substr(acc,18,3) as integer) >= 600 and cast(substr(account_co,18,3) as integer)<=607 AND o_day

我写了一个查询来查找给定时间段内一个子代的金额,它运行得很快:

SELECT FILIAL_CODE,
       sum(sum_eqv)/100 AS summa
FROM   table
WHERE  substr(acc,1,5) = '65434'
and    cast(substr(acc,18,3) as integer) >= 600
and    cast(substr(account_co,18,3) as integer)<=607
AND    o_day >= to_date('01.12.2019', 'DD.MM.YYYY')
and    oday < to_date('08.12.2019', 'DD.MM.YYYY')+ INTERVAL '1' DAY
AND    FILIAL_CODE = '001234'
以上查询工作正常。但当我想使用它的多个子公司,它变得越来越复杂。 下面的查询是需要修复的

SELECT FILIAL_CODE,
       sum(sum_eqv)/100 AS summa
FROM   table
WHERE  substr(acc,1,5) = '65434'
and    cast(substr(acc,18,3) as integer) >= 600
and    cast(substr(account_co,18,3) as integer)<=607
AND    o_day >= to_date('01.12.2019', 'DD.MM.YYYY')
and    oday < to_date('08.12.2019', 'DD.MM.YYYY')+ INTERVAL '1' DAY
AND    FILIAL_CODE in (select code from city where region = '26')
group by FILIAL_CODE;
此查询运行时间很长。我怎样才能最大化这个陈述。感谢您的帮助

尝试加入而不是加入,例如:

  SELECT t.filial_code, SUM (sum_eqv) / 100 AS summa
    FROM your_table t JOIN city c ON c.code = t.filial_code
   WHERE     SUBSTR (t.acc, 1, 5) = '65434'
         AND CAST (SUBSTR (t.acc, 18, 3) AS INTEGER) >= 600
         AND CAST (SUBSTR (t.account_co, 18, 3) AS INTEGER) <= 607
         AND t.o_day >= TO_DATE ('01.12.2019', 'DD.MM.YYYY')
         AND t.oday < TO_DATE ('08.12.2019', 'DD.MM.YYYY') + INTERVAL '1' DAY
         AND c.region = '26'
GROUP BY t.filial_code;

如果city.code和table.u代码被编入索引,这可能会有所帮助。

获取解释计划实际上查询没有停止,并且持续很长时间。我需要手动停止它。我认为in语句出现了问题。第一个查询运行得很快,因为它不是以select开头的,所以您会立即得到unknow命令。一般来说,您必须提供链接中讨论的其他一些想法,才能对性能相关的问题做出有意义的全面响应。对于您的情况,猜测是一个商店的查询超过了索引,另一个查询切换到完整表扫描。对不起,我修复了查询。我使用substr筛选了您执行最频繁的查询行之一您至少可以尝试将数据存储在第一个标准表单上,并在其上创建多列索引。这也没有帮助。城市表很小,但不管怎样,它花费了太多的时间,我们只是盲目地猜测。我们所拥有的只是您发布的查询,我们不知道表、索引、是否收集了统计数据。。。没有什么其中一条评论说你应该提供解释计划;那么,也许有人会指出正确的方向。