아래의 간단한 쿼리를 사용하여 체크 아웃 및 예상 반환 날짜를 기반으로 테이블에서 사용 가능한 자산을 선택합니다. 체크 아웃 및 예상 반환 날짜가 @RentStartDate
및 @RentEndDate
과 겹치면 UnavailableAsset
으로 선택하고 싶습니다.더 나은 성능을 위해 간단한 SQL 조건을 다시 작성하는 방법
set @RentStartDate = '2016-10-13';
set @RentEndDate = '2016-10-18';
SELECT AssetID as UnAvailableAsset
FROM agreementasset
WHERE (CheckOutDate >= @RentStartDate AND CheckOutDate <= @RentEndDate)
OR
(ExpectedReturnDate >= @RentStartDate AND ExpectedReturnDate <= @RentEndDate)
OR
(@RentStartDate >= CheckOutDate AND @RentEndDate <= ExpectedReturnDate);
지금 내가이 쿼리가 완벽하게 작동하는지 알고 아래로 내 쿼리를 볼 수 있지만, 난 그냥 where
절에 조건을 작성하는 더 나은 방법이 있는지 확실하지 않다하시기 바랍니다. 이 쿼리를보다 효율적으로 만들기위한 조건을 단순화하는 더 좋은 방법이 있습니까?
감사합니다.
데이터베이스 엔진 ? 쿼리 계획을 확인하여 수행중인 작업을 확인 했습니까? –
테이블 정의, 인덱스 포함? – jarlh
더 나은 성능을 제공하지만 가독성을 높일 수는 없지만'CheckOutDate> = @RentStartDate AND CheckOutDate <= @RentEndDate '를'CheckOutDate BETWEEN @RentStartDate AND @ RentEndDate' 및'(ExpectedReturnDate> = @RentStartDate AND ExpectedReturnDate <= @RentEndDate)'와'ExpectedReturnDate BETWEEN @RentStartDate AND @ RentEndDate'를 비교합니다. – haindl