질문은 SQL 서버에만 적용될 수 있습니다. 나는 같은 쿼리를 작성하는 경우 :WHERE-CASE 절 하위 쿼리 성능
SELECT * FROM IndustryData WHERE Date='20131231'
AND ReportTypeID = CASE WHEN (fnQuarterDate('20131231')='20131231') THEN 1
WHEN (fnQuarterDate('20131231')!='20131231') THEN 4
END;
합니까 함수를 호출 fnQuarterDate (또는 하위 쿼리) 절을 테이블의 각 행에 대해 실행되는 내부 케이스 내?
내가 얻는 경우에 더 나은 것이 얼마나 함수의 (또는 하위 쿼리) 내부 사전에 값 변수 같은 :
DECLARE @X INT
IF fnQuarterDate('20131231')='20131231'
SET @X=1
ELSE
SET @X=0
SELECT * FROM IndustryData WHERE Date='20131231'
AND ReportTypeID = CASE WHEN (@X = 1) THEN 1
WHEN (@X = 0) THEN 4
END;
내가 MySQL의에서 IN 내부 하위 쿼리가 있는지 알고 (..) WHERE 절 내에서 각 행에 대해 실행되며 SQL Server에 대해서도 동일하게 검색하려고합니다.
... 약 30K 행
그냥 채워 테이블과의 시간 차이를 발견 :
에 Query1 = 70ms가; 쿼리 2 = 6ms. 나는 그것이 그것을 설명한다고 생각하지만 아직도 그것의 뒤에 실제 사실을 모른다.
또한 UDF 대신 간단한 하위 쿼리가 있으면 어떤 차이가 있습니까?
쿼리에 대한 실제 실행 계획을 얻으려고 했습니까? –
정확히 그 안에 'else null'이 있습니까? fnquarterdate() 값이 같거나 같지 않습니다. 또는 이것은 새롭다 [trinary boolean] (http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx)입니까? 하위 쿼리의 경우 하위 쿼리가 외부 쿼리의 값에 종속 된 값을 갖는 경우 행 별로만 실행됩니다. 예 : 상관 하위 쿼리 –
@MarcB 예, NULL이 없어야합니다. – pxm