SQL Server – Confronto delle prestazioni della funzione Trim e LTRIM(RTRIM)

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

SQL Server - Confronto delle prestazioni della funzione Trim e LTRIM(RTRIM) trimperf

E’ molto chiaro che se usiamo qualsiasi funzione sulla colonna usata nella clausola WHERE siamo destinati a ottenere prestazioni scadenti.