如何优化超时任务统计查询中的两个日期的工作日计算?

我有一个表有工作开始日期,工作结束日期两个字段,现在希望统计工作超时的总数,我新建了一张日历表来维护日期的工作日状态。

表:workdays

id                status
2020-01-01            4
2020-01-02            1
2020-01-03            1
2020-01-04            2

4 节假日
1 工作日
2 周末

我新建了一个函数来计算两个日期之间的工作日(排除周末,节假日)。

create or replace function get_workday_count (start_date in date, end_date in date)
return number is
    day_count int;
begin
    select count(0) into day_count from WORKDAYS
    where TRUNC(ID) >= TRUNC(start_date)
    and TRUNC(ID) <= TRUNC(end_date)
    and status in (1, 3, 5);
    return day_count;
end;

现在执行统计时,发现查询时间很长(测试数据20多万行)。

select count(0) from ERP_SJ GET_WORKDAY_COUNT(start_date, end_date) > 5;

查询语句中用到的字段都有建立索引。
请问要怎么优化?或者是否有其他更好的解决方案?

阅读 3.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏