以下のクエリには多くの時間がかかりますが、すべての列がインデックスに登録されています。以下のSQLクエリは時間がかかりますが、パフォーマンスを向上させるためにはどのような方法がありますか?
どのように最適化するのですか?
SELECT
COUNT(CAST(CA.CORNER_ATTITUDE_ID AS VARCHAR (40)))
FROM
(SELECT *
FROM CORNER_ATTITUDE
WHERE OWNER_ID = '100'
AND CORNER_ATTITUDE_ID NOT IN (SELECT LEGAL_ID
FROM CAPTAIN_LOGIC
WHERE LEGAL_ID != '12345678'
AND OWNER_ID = '100')) CA
LEFT OUTER JOIN
CORNER_ATTITUDE_MEMBER CAC ON (CA.CORNER_ATTITUDE_ID = CAC.CORNER_ATTITUDE_ID)
JOIN
(SELECT *
FROM MEMBER
WHERE MEMBER_ROLE_ID = 'MEMBER') C ON (CAC.MEMBER_FESTIVEL_ID = C.MEMBER_FESTIVEL_ID)
LEFT OUTER JOIN
VINAYAN P ON (C.MEMBER_FESTIVEL_ID = P.VINAYAN_FESTIVEL_ID)
LEFT OUTER JOIN
VINAYAN_NAME PN ON (P.VINAYAN_FESTIVEL_ID = PN.VINAYAN_FESTIVEL_ID)
LEFT OUTER JOIN
DRA_SERVER OC ON CAST (ca.STAR_0_Numer AS NVARCHAR2 (40)) = OC.SERVER_PID
LEFT OUTER JOIN
(SELECT CORNER_ATTITUDE_ID, PROVIDE_ID
FROM STORED_PROVIDE
WHERE PROVIDE_ORIGIN_TYPE_CD = 'PROVIDE_ORIGIN_TYPE_DECISION_SERVICE') CF ON (CA.CORNER_ATTITUDE_ID = CF.CORNER_ATTITUDE_ID)
LEFT OUTER JOIN
STORED_DETAIL CD ON CD.PROVIDE_ID = CF.PROVIDE_ID
LEFT OUTER JOIN
STORED_APPL_PRODUCT CAP ON CAP.STORED_DETAIL_ID = CD.STORED_DETAIL_ID
LEFT OUTER JOIN
PRODUCT_TYPE PT ON PT.PRODUCT_TYPE_CD = CAP.PRODUCT_TYPE_CD
LEFT OUTER JOIN
DRA O ON O.GREEN_FESTIVEL_ID = OC.SERVER_FESTIVEL_ID
WHERE
(CA.STAR_0_STRG = 'TRUE'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'A'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'B'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'C'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'D'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'E'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'F'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'G'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'H'
AND CD.BORROW_USING_TXT <> 'I'
AND CD.BORROW_USING_TXT <> 'J'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'K'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'L'
AND CD.BORROW_USING_TXT <> 'M'
AND CD.BORROW_USING_TXT <> 'N'
AND CD.BORROW_USING_TXT <> 'O'
AND CA.CORNER_ATTITUDE_STATUS_CD <> 'P'
AND CD.BORROW_USING_TXT <> 'Q')
AND OC.SERVER_XID IN (400 Integer values);
あなたのsqlコードを書式化し、読みやすくして、さらに情報を追加し、正しくタグ付けします。あなたは 'sql-server'と' oracle'を持っているので、1つを選んでください。 – Tanner
パフォーマンス向上のために果物をぶら下げません。 select *は使わず、実際に必要な列だけを選択してください。あなたのwhere述語は非対応です。何よりもこのクエリを整理してフォーマットする必要があります。あなたのエイリアスは、私の眼球を取り出してポップアップしたいと思っています。エイリアスは、それらがどの表を表しているかを示す指標を提供する必要があります。あなたのものは、テーブルの名前とは関係のないランダムな文字のようです。あなたは不平等チェックと矛盾しています。いくつかの場所で!=と他の<>。 –
実際にどのようなメリットを提供するには、使用しているDBMSを決定する必要があります。次に、テーブルのddl(インデックスを含む)を提供する必要があります。すべての列が索引付けされているということは、通常、索引付け方針が良いものではないことを示しています。 –