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.
![SQL Server - Confronto delle prestazioni della funzione Trim e LTRIM(RTRIM) trimperf](https://blog.sqlauthority.com/wp-content/uploads/2018/05/trimperf.jpg)
E’ molto chiaro che se usiamo qualsiasi funzione sulla colonna usata nella clausola WHERE siamo destinati a ottenere prestazioni scadenti.