나는 부모 테이블 Orders
그리고 아이블 Jobs
다음 샘플 데이터
I 을 선택하려 주문에 따라 다음과 같은 요구사항
1>각 주문에 대한될 수 있습 0 거나 더 작업입니다. 선택하지 않기 위해 있지 않은 경우 모든 작업입니다.
2>사용자에서 작업할 수 없습니다 더 이상 하나의 작업에 속하는 동일한다.
예를 들어 사용자 1
에서 작업할 수 없습니다 작업에 속하는 순서 1 및 2 기 때문에 그는 이미 일에 작업 1
고 4
에서 같은 순서입니다.
3>만 선택 명령이 있는 작업 Requested
상태
나는 다음과 같은 쿼리에는 예상된 결과
DECLARE @UserID INT = 2
SELECT O.OrderID
FROM Orders O
JOIN Jobs J ON J.OrderID = O.OrderID
WHERE
J.JobStatus = 'Requested' AND
NOT EXISTS
(
--Must not have worked this Order
SELECT 1 FROM Jobs J1
WHERE J1.OrderID = O.OrderID AND J1.UserID = @UserID
)
Group By o.OrderID
쿼리인 Jobs
테이블에 두 번. 내가 노력하고 최적화하는 쿼리를 찾고있는 방법을 달성하는 예상된 결과를 사용하여 Jobs
테이블만 일단 가능한 경우. 다른 솔루션은 감사합니다. 나는 바꿀 수 있는 테이블 스키마는 경우 필요합니다.
작업 테이블이있는 거의 20M 행과 약간의 시간 쿼리를 보여주는 가난한 성과입니다. (예,우리는 인덱스). 내가 생각하의 스캐닝 작업 테이블은 두 번 일으키는 성능 문제입니다.
ID
의 유형 int. 단지에 대한 이해를 목적을 유지했으로 이며