我有一个表有工作开始日期,工作结束日期两个字段,现在希望统计工作超时的总数,我新建了一张日历表来维护日期的工作日状态。
表: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;
查询语句中用到的字段都有建立索引。
请问要怎么优化?或者是否有其他更好的解决方案?
问题已解决,我在stackoverflow也开了问题
https://stackoverflow.com/questions/63499860/optimize-the-query-of-weekday-statistics-between-two-dates