Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:IF EXISTS verlangsamt eine Abfrage massiv

Haben Sie versucht, die ursprüngliche Abfrage mit TOP 1 auszuführen? höchstwahrscheinlich wird es genauso langsam sein.

Manchmal, wenn der Optimierer denkt, dass etwas sehr wahrscheinlich ist und mit wenig Aufwand eine große Menge an Daten zurückgeben wird (d. h. fast alle Datensätze werden zurückgegeben), wählt er meistens Loop Joins, weil er nur den ersten und einen erhalten muss Loop Join ist gut, um nur ein paar Datensätze zu erhalten. Wenn sich herausstellt, dass das nicht stimmt, dauert es ewig und einen Tag, um Ergebnisse zu erzielen.

In Ihrem Fall klingt es so, als wäre es sehr selten, also tut diese Wahl sehr weh. Versuchen Sie stattdessen etwas wie SELECT @count = COUNT(*) FROM ... und dann prüfen, ob dieser Zählwert nicht Null ist.