10

Welche der folgenden Abfrage besser ist ... Dies ist nur ein Beispiel, es gibt zahlreiche Situationen, in denen ich den Benutzernamen statt UserIDinnere Verknüpfung Vs skalare Funktion

Select EmailDate, B.EmployeeName as [UserName], EmailSubject 
    from Trn_Misc_Email as A 
     inner join 
     Mst_Users as B on A.CreatedUserID = B.EmployeeLoginName 

oder

angezeigt werden soll
Select EmailDate, GetUserName(CreatedUserID) as [UserName], EmailSubject 
    from Trn_Misc_Email 

Wenn es bei der Verwendung des Erstes keinen Leistungsvorteil ist, würde ich es vorziehen, die zweite mit ... ich würde rund 2000 Datensätze in Benutzertabelle und 100k Datensätze in E-Mail-Tabelle wird mit ...

Dank

+0

Haben Sie das selbst versucht? –

Antwort

11

Eine gute Frage und groß über SQL-Performance zu denken usw.

Von einer reinen SQL Sicht der ersten besser ist. In der ersten Anweisung ist es möglich, alles in einem einzigen Batch-Befehl mit einem Join auszuführen. Im zweiten Fall muss für jede Zeile in trn_misc_email eine separate BATCH-Auswahl ausgeführt werden, um den Benutzernamen zu erhalten. Dies könnte jetzt oder in Zukunft zu einem Leistungsproblem führen.

Es ist auch einfacher, für jeden zu lesen, der zum Projekt kommt, da sie sehen können, was passiert. Wenn du den zweiten hast, dann musst du gehen und in die Funktion schauen (ich vermute, das ist was es ist), um herauszufinden, was das macht.

Also in Wirklichkeit zwei Gründe, den ersten Grund zu verwenden.

3

Das Inline-SQL JOIN wird normalerweise better than the scalar UDF sein, da es besser optimiert werden kann.

Wenn Sie es testen, stellen Sie sicher, dass Sie SQL Profiler verwenden, um die Kosten beider Versionen anzuzeigen. SET STATISTICS IO ON meldet nicht die Kosten für skalare UDFs in seinen Abbildungen, die die skalare UDF-Version besser erscheinen lassen, als sie tatsächlich ist.

+0

Haben Sie irgendwelche Verweise, die mir helfen, den Ausführungsplan und die Statistik-Informationen zu verstehen? –

+3

@The King - Sehen Sie dieses kostenlose eBook ["Zerlegung von SQL Server Execution Plans" von Grant Fritchey] (http: //downloads.red-gate. com/ebooks/HighPerformanceSQL_ebook.zip) –

1

Um Ihnen mehr zu helfen, nur ein Tipp, in SQL Server mit dem Managment Studio können Sie die Leistung von Display Estimated execution plan bewerten. Es zeigte, wie die Indizes und Joins funktioniert und Sie können den besten Weg wählen, um sie zu verwenden.

Sie können auch den DTA (Database Engine Tuning Advisor) für weitere Informationen und Optimierung verwenden.

+1

Scalar UDFs sind nur wie eine Blackbox auf diese denke ich denke. –

+1

Haben Sie Referenzen, die mir helfen, den Ausführungsplan und die Statistik-Informationen zu verstehen? –

+0

@Martin Smith, nein, der Ausführungsplan klar mit allen Schritten gezeigt und was passiert als Kosten, .... Sie können es selbst versuchen. Plus ein Skalar UDF Cache den Ausführungsplan für die Ausführung in den nächsten Läufen optimiert –

Verwandte Themen