SQL Server – Prestandajämförelse av funktionen Trim och LTRIM(RTRIM)

Under en praktisk workshop om prestandatrimning av SQL Server fick jag nyligen en fråga om prestandajämförelse av funktionen Trim och LTRIM/RTRIM.

För funktionen Trim har jag tidigare bloggat om följande blogginlägg, och jag vill be dig läsa det innan du fortsätter med demonstrationen från denna blogg.

  • SQL SERVER – TRIM-funktion för att ta bort ledande och avslutande mellanslag i strängar – SQL in Sixty Seconds #040 – Video
  • SQL SERVER – 2008 – Förbättrad TRIM()-funktion – Ta bort avslutande mellanslag, ledande mellanslag, vitrymder, tabuleringar, Carriage Returns, Line Feeds
  • SQL SERVER – 2008 – TRIM() Funktion – Användardefinierad funktion
  • SQL SERVER – TRIM() Funktion – UDF TRIM()
  • SQL SERVER – 2017 – Hur tar man bort ledande och avslutande mellanslag med TRIM-funktionen?
  • SQL SERVER – Prestandaobservation av TRIM-funktionen

Nej, låt oss börja med ett enkelt exempel där vi kommer att jämföra prestandan hos LTRIM/RTRIM med TRIM-funktionen som nyligen introducerats 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 testet har vi tre select-anvisningar där vi i de två fallen använder LTRIM/RTRIM samt TRIM-funktionen. Låt oss jämföra prestandan för samma sak med det select statement där vi inte har använt någon funktion i WHERE-klausulen.

SQL Server - Prestandajämförelse av funktionen Trim och LTRIM(RTRIM) trimperf

SQL Server - Prestandajämförelse av funktionen Trim och LTRIM(RTRIM) trimperf

Det är mycket tydligt att om vi använder någon funktion på kolumnen i WHERE-klausulen så kommer vi att få dålig prestanda.