Bei der Durchführung des praktischen SQL Server Performance Tuning Workshops habe ich kürzlich eine Frage erhalten, die sich auf den Leistungsvergleich zwischen der Funktion Trim und LTRIM/RTRIM bezieht.
Bezüglich der Funktion Trim habe ich zuvor im folgenden Blogbeitrag geschrieben und ich bitte Sie, diesen zu lesen, bevor Sie mit der Demonstration in diesem Blog fortfahren.
- SQL SERVER – TRIM Function to Remove Leading and Trailing Spaces of String – SQL in Sixty Seconds #040 – Video
- SQL SERVER – 2008 – Enhanced TRIM() Function – Remove Trailing Spaces, Leading Spaces, White Space, Tabs, Carriage Returns, Line Feeds
- SQL SERVER – 2008 – TRIM() Funktion – Benutzerdefinierte Funktion
- SQL SERVER – TRIM() Funktion – UDF TRIM()
- SQL SERVER – 2017 – Wie entfernt man führende und nachgestellte Leerzeichen mit der TRIM Funktion?
- SQL SERVER – Leistungsbeobachtung der TRIM-Funktion
Lassen Sie uns mit einem einfachen Beispiel beginnen, in dem wir die Leistung von LTRIM/RTRIM mit der TRIM-Funktion vergleichen, die neu in SQL Server eingeführt wurde
-- Create a sample tableCREATE TABLE Test (ID INT, Col1 CHAR(100))GOSET NOCOUNT ONINSERT Test (ID, Col1)VALUES (1,' a ')GO 1000INSERT Test (ID, Col1)VALUES (1,' b ')GO-- Create a nonclustered indexCREATE NONCLUSTERED INDEX IX_Test_Col1 ON Test (Col1);GO-- SELECT TESTSELECT IDFROM TestWHERE LTRIM(RTRIM(Col1)) = 'b'GOSELECT IDFROM TestWHERE TRIM(Col1) = 'b'GOSELECT IDFROM TestWHERE Col1 = ' b 'GO-- cleanupDROP TABLE TestGO
Während des Tests haben wir nun drei Select-Anweisungen, wobei wir in beiden Fällen sowohl LTRIM/RTRIM als auch die TRIM-Funktion verwenden. Vergleichen wir die Leistung derselben mit der Select-Anweisung, bei der wir keine Funktion in der WHERE-Klausel verwendet haben.
Es ist ganz klar, dass wir eine schlechte Leistung erhalten, wenn wir eine Funktion für die in der WHERE-Klausel verwendete Spalte verwenden.