例如,我必须为一个特定员工创建一个视图,该视图存储过去50天的考勤信息,而我有超过一百万名员工。
我将提供员工id作为输入,我希望仅为具有最后50天考勤详细信息的员工创建此视图。
简单的解释将不胜感激。
谢谢。
视图只是一个存储的查询。因此,如果你总是只需要最后50天,那么
create or replace view v_50 as
select empno, ename, date_in, date_out
from attendance
where date_in >= trunc(sysdate) - 50
然后为您需要的任何员工获取数据:
select *
from v_50
where empno = 1234;
另一方面,你根本不需要一个视图——从原始表中做同样的事情:
select empno, ename, date_in, date_out
from attendance
where empno = 1234
and date_in >= trunc(sysdate) - 50
确保empno
和date_in
都有索引,定期收集统计信息。
要检索特定月份的数据,一个选项是
select ...
from attendance
where to_char(date_in, 'yyyymm') = '202009'
基于函数的索引会有所帮助;否则,你就必须使用类似的东西
where date_in between date '2020-09-01' and date '2020-03-30'
如果对date_in
进行索引,则与to_char
一样,它将无法使用这样的索引。