Durante il seminario pratico di SQL Server Performance Tuning ho recentemente ricevuto una domanda che riguarda il confronto delle prestazioni della funzione Trim e LTRIM/RTRIM.
Per quanto riguarda la funzione trim, ho scritto nel seguente post sul blog e vi chiedo di leggere lo stesso prima di continuare la dimostrazione da questo blog.
- SQL SERVER – Funzione TRIM per rimuovere gli spazi iniziali e finali della stringa – SQL in Sixty Seconds #040 – Video
- SQL SERVER – 2008 – Funzione TRIM() migliorata – Rimuove spazi finali, spazi iniziali, spazi bianchi, tabs, Returns, Line Feeds
- QL SERVER – 2008 – Funzione TRIM() – Funzione definita dall’utente
- SQL SERVER – Funzione TRIM() – UDF TRIM()
- SQL SERVER – 2017 – Come rimuovere gli spazi iniziali e finali con la funzione TRIM?
- SQL SERVER – Osservazione delle prestazioni della funzione TRIM
Noe iniziamo con un semplice esempio in cui confronteremo le prestazioni di LTRIM/RTRIM con la funzione TRIM che è stata recentemente introdotta in 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
Ora durante il test, abbiamo tre dichiarazioni di selezione in cui i due casi stiamo usando LTRIM/RTRIM e la funzione TRIM. Confrontiamo le prestazioni dello stesso con la dichiarazione di selezione in cui non abbiamo usato alcuna funzione nella clausola WHERE.
E’ molto chiaro che se usiamo qualsiasi funzione sulla colonna usata nella clausola WHERE siamo destinati a ottenere prestazioni scadenti.