작업 상태가 포함 된 로그 테이블이 있습니다. 열 중 하나가 작업 이름입니다. 때로는 작업이 전혀 실행되지 않으므로 항목이 없습니다. 내 SQL은 로그에서 누락 된 작업을 결정합니다.테이블에 존재하지 않는 항목을 찾는 SQL 쿼리 최적화
이 쿼리에는 약 17 분이 소요되며 이는 매우 길다. 나는 이보다 오래 걸리지 않는 다른 복잡한 것들을 많이 가지고있다.
어떻게 최적화 할 수 있습니까?
-- Display missing jobs. Thats jobs that are not in job log but should be
declare @startDate datetime, @endDate datetime
declare @rangeInHours int
set @rangeInHours = -24
set @endDate = '2012-01-17 12:00:01'
set @startDate = dateadd(hour, @rangeInHours, @endDate)
declare @myTable table(name nvarchar(50))
insert into @myTable values('Activity work')
-- There are another 100 entries like this one above to add all the expected jobs
-- this is my sql to find missing jobs
select distinct i.name from @myTable i
where not exists
(select 1 from job_log j
where j.name = i.name
and j.start_date > @startDate and j.start_date < @endDate
)
order by i.name asc
스레드의 수를 겪었지만 적절한 대답, 내가 이해하고 내 제한된 SQL로 구현할 수있는 적어도 하나를 찾을 수 없습니다.
'job_log', 특히'(name, start_date)'의 커버 색인에 적절한 인덱스가 있습니까? 쿼리 계획을 게시 할 수 있습니까? –
job_log에 몇 개의 레코드가 있습니까? Lieven이 말했듯이 질의는 소리처럼 들리므로 색인 문제 일 것입니다. – Gary