ich die unter Abfrage verwendet, die lange Zeit in Anspruch nahm auszuführen, da sie bekam 2 Millionen DatensätzeAlternative Art und Weise von Nicht in SQL existiert
DELETE
AC
FROM
SGT_APPLICATION_CHECKLIST AC
INNER JOIN SGT_APPLICATION_CHECKLIST_REF CR ON AC.CHECKLIST_REF_ID = CR.CHECKLIST_REF_ID
INNER JOIN SGT_APPLICATION APP ON APP.APPLICATION_ID = AC.APPLICATION_ID
WHERE
NOT EXISTS
(
SELECT 1 FROM SGT_APPLICATION_CHECKLIST SAC
WHERE SAC.APPLICATION_ID = AC.APPLICATION_ID AND
APP.APP_CATEGORY_VALUE = CR.APP_CATEGORY_VALUE
AND APP.APP_SUB_CATEGORY_VALUE = CR.APP_SUB_CATEGORY_VALUE
)
So Was ist die alternative Möglichkeit der statt „existiert nicht“
1 - langsam definieren. 2 bis 2 Millionen zu löschende Datensätze könnten aus vielen Gründen "langsam" sein, wie z. B. Trigger, Kaskaden, große Daten, aktualisierte Indizes usw. Haben Sie sich das angesehen? 3 - um 2 Millionen meinst du 2 Millionen zu filtern und löschen oder 2 Millionen insgesamt gelöscht werden? 4 - Bevor Sie versuchen, die Abfrage neu zu schreiben, haben Sie sich den Abfrageplan angesehen, um zu sehen, warum er langsam sein könnte? Sobald Sie das haben, sollten Sie es aufnehmen. – Igor
Sie brauchen wahrscheinlich nur die entsprechenden Indizes für die Tabellen. –
Konvertiere innere Anfrage in 'LINKE VERBINDUNG' s mit 'IS NULL'? Obwohl moderne Abfrageoptimierer wahrscheinlich so etwas selbst ausprobieren würden. –