0
안녕하세요 저는 CTE에 익숙하지 않습니다. select case 문을 사용하여 하위 쿼리를 만들었습니다. CTE를 대신 사용하면 성능이 향상 될 수 있다고 앱 아키텍트가 지적 했으므로 몇 가지 시도를 시도해 보았습니다. 수정 된 쿼리는 다음과 같습니다.성능 향상을위한 SQL CTE
업데이트 ** 로컬 DB를 사용하고 있습니다. 전체 작동 쿼리를 추가 할 것입니다. 큰 것입니다. LEFT OUTER JOIN의 성능을 향상시키기 위해 알림을 받았지만 SELECT 문을 추가했습니다.
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'V' AND name = 'VW_TRPRINT_TITLERECORD1')
BEGIN
DROP View VW_TRPRINT_TITLERECORD1
END
GO
Create VIEW VW_TRPRINT_TITLERECORD1
as
SELECT
distinct(T.TTL_NUMBER), T.OWNERSHIP_DOC_ID
, OD.TXN_ID
, TX.TXN_DATE
, OWNSHIP.CUS_ID
, PTA.CUS_FULLNAME_PART1 AS PRIMARY_OWNER_NAME
, PTA.CUS_FULLNAME_PART2 AS SECOND_OWNER_NAME
, PTA.CUS_ADDR_ID
, CUST_ADDR.ADDRESS_LINE_1 AS PRIMARY_OWNER_STREET_LINE_1 --PRIMARY OWNER NAME AND ADDRESS DETAILS
, CUST_ADDR.CITY AS PRIMARY_OWNER_CITY
, CUST_ADDR.STATE AS PRIMARY_OWNER_STATE
, CUST_ADDR.ZIP_CODE AS PRIMARY_OWNER_ZIP_CODE
, CUST_ADDR.ZIP_PLUS AS PRIMARY_OWNER_ZIP_PLUS
, CUST_ADDR.POSTNET_BARCODE AS PRIMARY_OWNER_COUNTY
, PTA.FIRST_LIEN_NAME AS FIRST_SECURED_NAME
, PTA.FIRST_LOAN_DATE AS LOAN_DATE
, PTA.FIRST_LIEN_ADDRESS_ID
, FIRST_LIEN_ADDR.ADDRESS_LINE_1 AS FIRST_SECURED_STREET_LINE_1 --FIRST SECURED PARTY ADDRESS DETAILS
, FIRST_LIEN_ADDR.CITY AS FIRST_SECURED_CITY
, FIRST_LIEN_ADDR.STATE AS FIRST_SECURED_STATE
, FIRST_LIEN_ADDR.ZIP_CODE AS FIRST_SECURED_ZIP_CODE
, FIRST_LIEN_ADDR.ZIP_PLUS AS FIRST_SECURED_ZIP_PLUS
, FIRST_LIEN_ADDR.POSTNET_BARCODE AS FIRST_LIEN_COUNTY
, PTA.SECOND_LIEN_NAME AS SECOND_SECURED_PARTY_NAME
, PTA.SECOND_LOAN_DATE
, PTA.SECOND_LIEN_ADDRESS_ID
, PTA.MAIL_TITLE_TO_SECURED_PARTY
, SECOND_LIEN_ADDR.ADDRESS_LINE_1 AS SECOND_SECURED_STREET_1 --SECOND SECURED PARTY ADDRESS DETAILS
, SECOND_LIEN_ADDR.CITY AS SECOND_SECURED_CITY
, SECOND_LIEN_ADDR.STATE AS SECOND_SECURED_STATE
, SECOND_LIEN_ADDR.ZIP_CODE AS SECOND_SECURED_ZIPCODE
, SECOND_LIEN_ADDR.ZIP_PLUS AS SECOND_SECURED_ZIP_PLUS
, SECOND_LIEN_ADDR.POSTNET_BARCODE AS SECOND_LIEN_COUNTY
, TMP.ADDRESSEE AS SPECIAL_MAIL_NAME --SPECIAL MAILING NAME AND ADDRESS DETAILS
, TMP.ADDRESS_LINE_1 AS SPECIAL_MAILING_LINE_1
, TMP.CITY AS SPECIAL_MAILING_CITY
, TMP.STATE AS SPECIAL_MAILING_STATE
, TMP.ZIP_CODE AS SPELCIAL_MAILING_ZIP_CODE
, TMP.ZIP_PLUS AS SPECIAL_MAILING_ZIP_PLUS
, TMP.POSTNET_BARCODE AS SPELCIAL_MAILING_COUNTY
, MAIL_TO_NAME
, MAIL_TO_ADDR.ADDRESS_LINE_1 AS MAIL_TO_STREET_LINE_1
, MAIL_TO_ADDR.CITY AS MAIL_To_CITY
, CASE WHEN MAIL_TO_ADDR.STATE = '' THEN
NULL ELSE
MAIL_TO_ADDR.STATE END AS
MAIL_TO_STATE
, CASE WHEN MAIL_TO_ADDR.ZIP_CODE = '' THEN
NULL ELSE
MAIL_TO_ADDR.ZIP_CODE END AS
MAIL_TO_ZIP_CODE
, MAIL_TO_ADDR.ZIP_PLUS AS MAIL_TO_ZIP_PLUS
, MAIL_TO_ADDR.POSTNET_BARCODE AS MAIL_TO_ZIP_COUNTY
,'MAILING_CODE' = CASE
--WHEN TMP.ADDRESS_ID IS NOT NULL THEN 'M'
WHEN PTA.MAIL_TITLE_TO_SECURED_PARTY = 1 THEN 'S'
WHEN TMP.ADDRESS_ID IS NULL AND OWNSHIP.IS_MAIL_OWNER = 1 AND PTA.MAIL_TITLE_TO_SECURED_PARTY = 0 AND (PTA.CUS_ADDR_ID = PTA.MAIL_TO_ADDRESS_ID OR MAIL_TO_ADDR.ADDRESS_LINE_1 = CUST_ADDR.ADDRESS_LINE_1) THEN ''
ELSE 'M'
END
FROM VW_NONVOIDED_TITLES T
INNER JOIN PRESERVE_TITLE_ATTRIBUTES PTA ON PTA.TITLES_ID = T.ID
LEFT OUTER JOIN ADDRESSES CUST_ADDR ON CUST_ADDR.ID = PTA.CUS_ADDR_ID
LEFT OUTER JOIN ADDRESSES FIRST_LIEN_ADDR ON FIRST_LIEN_ADDR.ID = PTA.FIRST_LIEN_ADDRESS_ID
LEFT OUTER JOIN ADDRESSES SECOND_LIEN_ADDR ON SECOND_LIEN_ADDR.ID = PTA.SECOND_LIEN_ADDRESS_ID
LEFT OUTER JOIN ADDRESSES MAIL_TO_ADDR ON MAIL_TO_ADDR.ID =
(SELECT
CASE WHEN SMA.DOC_ID = 6 THEN
PTA.CUS_ADDR_ID
ELSE
PTA.MAIL_TO_ADDRESS_ID
END
FROM
PRESERVE_TITLE_ATTRIBUTES PA
INNER JOIN SPECIAL_MAILING_ADDRESS SMA ON SMA.ADDRESS_ID = PTA.MAIL_TO_ADDRESS_ID AND PA.ID =PTA.ID)
/*Title Contains a Second Owner*/
INNER JOIN VW_NONVOIDED_OWNERSHIP_DOCUMENT OD ON OD.ID = T.OWNERSHIP_DOC_ID --AND OD.END_DATE IS NULL
INNER JOIN VW_NONVOIDED_OWNERSHIPS OWNSHIP ON OWNSHIP.OWNERSHIP_DOCUMENT_ID = OD.ID AND OWNSHIP.IS_MAIL_OWNER = 1 --AND OWNSHIP.END_DATE IS NULL
INNER JOIN VW_NONVOIDED_VEHICLES V ON V.ID = OD.VEH_ID AND V.END_DATE IS NULL
INNER JOIN TXN TX ON TX.ID = OD.TXN_ID
CTE로 개선 할 수있는 마지막 조인 선택 사례 문을 수정했습니다. 이것을 달성하는 방법에 대한 제안이나 조언을 주시면 감사하겠습니다.
전체 작업 쿼리를 게시 할 수 있습니까? –
어떤 데이터베이스를 사용하고 있습니까? –
로컬 DB가 사용 중이며 전체 작업 쿼리가 게시되었습니다. – user3312107