SQL Server – Porównanie wydajności funkcji Trim i LTRIM(RTRIM)

Podczas prowadzenia praktycznych warsztatów SQL Server Performance Tuning otrzymałem ostatnio pytanie, które dotyczyło porównania wydajności funkcji Trim i LTRIM/RTRIM.

W odniesieniu do funkcji trim, wcześniej pisałem o tym w poniższym wpisie na blogu i proszę o zapoznanie się z nim przed kontynuowaniem demonstracji z tego bloga.

  • SERWERSQL – Funkcja TRIM do usuwania końcowych i końcowych spacji z łańcucha znaków – SQL in Sixty Seconds #040 – Video
  • SERWERSQL – 2008 – Rozszerzona funkcja TRIM() – Usuwanie końcowych spacji, wiodących spacji, białych spacji, tabulatorów, Carriage Returns, Line Feeds
  • SQL SERVER – 2008 – Funkcja TRIM() – Funkcja zdefiniowana przez użytkownika
  • SQL SERVER – Funkcja TRIM() – UDF TRIM()
  • SQL SERVER – 2017 – Jak usunąć spacje wiodące i wleczone za pomocą funkcji TRIM?
  • SQL SERVER – Obserwacja wydajności funkcji TRIM

No to zacznijmy od prostego przykładu, w którym porównamy wydajność LTRIM/RTRIM z funkcją TRIM, która jest nowo wprowadzona w SQL Server

-- 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

Teraz podczas testu mamy trzy instrukcje select, gdzie w dwóch przypadkach używamy zarówno LTRIM/RTRIM jak i funkcji TRIM. Porównajmy wydajność tego samego z instrukcją select, w której nie użyliśmy żadnej funkcji w klauzuli WHERE.

SerwerSQL - Porównanie wydajności funkcji Trim i LTRIM(RTRIM) trimperf

SerwerSQL - Porównanie wydajności funkcji Trim i LTRIM(RTRIM) trimperf

Jasno widać, że jeśli użyjemy jakiejkolwiek funkcji na kolumnie użytej w klauzuli WHERE, będziemy musieli uzyskać niską wydajność.