SQL Server – Sammenligning af ydeevne af funktionen Trim og LTRIM(RTRIM)

Med hensyn til SQL Server Performance Tuning Practical Workshop modtog jeg for nylig et spørgsmål om sammenligning af ydeevne af funktionen Trim og LTRIM/RTRIM.

Med hensyn til trim-funktionen har jeg tidligere blogget i følgende blogindlæg, og jeg beder dig om at læse det samme, før du fortsætter demonstrationen fra denne blog.

  • 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 – Brugerdefineret funktion
  • SQL SERVER – TRIM() Funktion – UDF TRIM()
  • SQL SERVER – 2017 – Hvordan fjerner man ledende og afsluttende mellemrum med TRIM-funktionen?
  • SQL SERVER – Præstationsobservation af TRIM-funktionen

Nej lad os starte med et simpelt eksempel, hvor vi vil sammenligne ydeevnen af LTRIM/RTRIM med TRIM-funktionen, som er nyligt indført i 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

Nu under testen har vi tre select statement, hvor vi i de to tilfælde bruger LTRIM/RTRIM samt TRIM-funktionen. Lad os sammenligne ydelsen af det samme med den select statement, hvor vi ikke har brugt nogen funktion i WHERE-klausulen.

SQL Server - Sammenligning af ydeevne for funktionen Trim og LTRIM(RTRIM) trimperf

SQL Server - Sammenligning af ydeevne for funktionen Trim og LTRIM(RTRIM) trimperf

Det er meget tydeligt, at hvis vi bruger en funktion på den kolonne, der bruges i WHERE-klausulen, er vi bundet til at få dårlig ydeevne.