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