SSMS 2008 R2를 사용하여 TSQL 쿼리를 개발 중이며 현재 많은 왼쪽 조인을 사용하는이 sproc을 최적화하고 싶습니다. 하나의 행/조회 값을 포함하는 조회 테이블이 있습니다. 그래서 내 TSQL 코드는 다음과 같습니다조회 테이블을 최적화하는 방법은 무엇입니까?
Table A = main record table
Table B = Lookup Table
row1 x unique_identifier, y varchar(100)
row2 x unique_identifier, y varchar(100)
row3 x unique_identifier, y varchar(100)
row4 x unique_identifier, y varchar(100)
그래서이 조회 테이블의 각 행은 두 개의 값이 하나 unique_identifier을 다른 값은 VARCHAR입니다. 나는이 생각을 할 수있는 더 효율적인 방법이있을거야
select *
FROM A
LEFT JOIN B ON B.X = A.X WHERE B.X = 123456
LEFT JOIN B2 ON B2.X = A.X WHERE B2.X = 123457
LEFT JOIN B3 ON B3.X = A.X WHERE B3.X = 123458
LEFT JOIN B4 ON B4.X = A.X WHERE B4.X = 123459
LEFT JOIN B5 ON B5.X = A.X WHERE B5.X = 123451
:처럼 그래서 현재 내 SPROC 코드가 보인다. 그리고 내 진짜 sproc 코드는 실제로이 조회 테이블을 5 번이 아니라 30 번 결합합니다. 나는 또한 임시 테이블을 사용하여 시도했지만 그 중 하나를 최적화하는 것하지 않았다. LEFT JOIN을 모두 교체하는 방법에 대한 권장 사항은 무엇입니까?
좋습니다. 이제이 질문을 업데이트하고 있습니다. 내가 PIVOT 및 UNPIVOT에 기사를 쳐다 보면서, 참고
UDT_Injuries abduction ARREST_PARENT
NULL NULL Outside of facility
Client NULL NULL
Client NULL Outside of facility
None NULL NULL
None NULL Outside of facility
Other adult NULL NULL
Other adult NULL Outside of facility
Parent NULL NULL
Peer NULL NULL
Sibling NULL NULL
,하지만 난 집계하지 않으 :
SELECT DISTINCT
lut.[description] as UDT_Injuries,
lut2.[description] as abduction,
lut3.[description] as ARREST_PARENT
FROM evolv_cs.dbo.incident_header_x x with (nolock)
LEFT JOIN user_defined_lut_rv lut on lut.user_defined_lut_id = x.UDT_Injuries
LEFT JOIN user_defined_lut_rv lut2 on lut2.user_defined_lut_id = x.ABDUCTION
LEFT JOIN user_defined_lut_rv lut3 on lut3.user_defined_lut_id = x.ARREST_PARENT
WHERE lut.[description] IS NOT NULL OR lut2.[description] IS NOT NULL OR lut3.[description] IS NOT NULL
이 쿼리에 대한 출력의 처음 10 행 :이 내 정확한 쿼리입니다 모든 데이터. 대신 나는 incident_header_x의 키 id 값을 user_defined_lut_rv의 varchar 값으로 변환하려고합니다.
UDT_Injuries ABDUCTION ARREST_PARENT
5B84773B-99BF-4EB9-8545-EFC06A35FE29 NULL NULL
NULL 4F18EDE9-BBBA-4430-9EF4-4E28EAC1E6D4 NULL
5B84773B-99BF-4EB9-8545-EFC06A35FE29 NULL NULL
NULL NULL 4F18EDE9-BBBA-4430-9EF4-4E28EAC1E6D4
NULL NULL 5B84773B-99BF-4EB9-8545-EFC06A35FE29
내가 달성하기 위해 노력하고 지금의이 메이크업 감각을 수행 incident_header_x에서
샘플 데이터는 같다? 이 id 값을 user_defined_lut_rv 조회 테이블에서 varchar 값으로 변환 하시겠습니까?
당신이 묻는 것을 식별하기가 어렵습니다. 문제가 있습니까? 30 개의 행을 가진 1 개의 조회 테이블 또는 1 개의 행을 가진 30 개의 조회 테이블이 있습니까? 코드가 합법적 인 구문처럼 보이지 않습니다. '123456이 고유 식별자가 아니더라도 B.X = A.X WHERE B.X = 123456'에서'선택 * 왼쪽 결합 B를 선택하면 무엇이 잘못됩니까? –
그냥 왜 값 (123456)에 5 조인을하고 있습니까? – Paparazzi
그래, 위의 TSQL 코드가 수정되었습니다. 제발 자세하게 길을 잃지 마십시오. 요점은 내가 가입 할 하나의 조회 테이블이 있다는 것입니다. varchar 값을 기본 테이블 A에 포함시키는보다 효율적인 방법이 필요합니다. 어떻게해야합니까? 내가 CTE 또는 다른 논리를 사용할 수있는 것처럼? 그리고 예, "123456"은 하나의 고유 식별자입니다. 그래서 현재에는 거기에 합쳐지는 30 개의 다른 uniqueidentifier 값이 있습니다. – salvationishere