このクエリを最適化する方法を教えてください。私は挿入されたIDを引き出すためにマージを使用していますMergeが遅すぎるため、このクエリを最適化する方法
実行計画を見ました。それは並べ替えに多くのコストを引き起こしていました。
マージを使用する代わりにこれを行う他の方法はありますか。私はBY TARGETを使ってみました。まだ遅いです。私はこのマージステートメントに乗りたいです。
DECLARE @TEMP_STUDENT_DETAILS_ID AS TABLE (STUDENT_DETAILS_ID INT, SCHOOL_ID INT)
MERGE INTO DBO.STUDENT_DETAILS USING (
SELECT ISNULL(SUM(MARKS),0) AS MARKS, SCHOOL_ID
FROM DBO.OLD_STUDENT_DETAILS
WHERE SCHOOL_ID IS NOT NULL
GROUP BY SCHOOL_ID) SRC ON 1 = 0
WHEN NOT MATCHED BY TARGET THEN
INSERT (MARKS
,SCHOOL_ID
,CODE_ID
,CODE_VALUE
,CREATED_BY
,CREATED_DATE
,MODIFIED_BY
,MODIFIED_DATE)
VALUES (SRC.MARKS
,SRC.SCHOOL_ID
,101 --CODE_ID
,'ADA' --CODE_VALUE
,'Admin'
,GETDATE()
,'Admin'
,GETDATE())
OUTPUT INSERTED.STUDENT_DETAILS_ID, SRC.SCHOOL_ID INTO @TEMP_STUDENT_DETAILS_ID;
とにかくここでマージのポイントは何ですか?マージ述部と決してマッチしないようにハードコーディングしました。単純に挿入文を使用しないのはなぜですか? –
@SeanLangeおそらく、OUTPUT句を使用することが考えられますが、私はちょうどINSERT/SELECTを使用します。 –
ouput idのはい私はマージを使用しました。マージなしでこれを最適化する他の方法はありますか?私は実行計画で、マージステートメントと並べ替えでより多くのコストが発生するのを見た。 – Kiran