Wie kann ich diese Abfrage optimieren. Ich benutze Merge, um eingefügte IDsMerge Ursachen zu langsam, wie diese Abfrage zu optimieren
ziehen Ich habe auf Ausführungsplan geschaut. Das verursachte mehr Kosten.
Gibt es eine andere Möglichkeit, dies zu tun, anstatt Merge zu verwenden. Ich habe versucht, BY TARGET zu verwenden. Immer noch langsam. Ich möchte von dieser Zusammenführungsaussage reiten.
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;
Was ist der Sinn der Zusammenführung hier sowieso? Sie haben es hart codiert, nie mit dem Zusammenführungsprädikat übereinzustimmen. Warum nicht einfach eine Insert-Anweisung verwenden ??? –
@SeanLange Vielleicht ist die Idee, die OUTPUT-Klausel zu verwenden, aber ja: Ich würde nur INSERT/SELECT. –
Ja, um die IDs auszugeben, habe ich Merge verwendet. Gibt es eine andere Möglichkeit, dies ohne Zusammenführung zu optimieren? Ich sah am Ausführungsplan verursacht mehr Kosten bei Merge-Anweisungen und sortieren. – Kiran