SQL Server – Comparación del rendimiento de la función Trim y LTRIM(RTRIM)

Mientras impartía el Taller Práctico de Ajuste del Rendimiento de SQL Server recibí recientemente una pregunta que está relacionada con la comparación del rendimiento de la función Trim y LTRIM/RTRIM.

Respecto a la función trim, he escrito previamente en el siguiente blog y les pido que lo lean antes de continuar con la demostración de este blog.

  • SQL SERVER – Función TRIM para eliminar los espacios iniciales y finales de la cadena – SQL in Sixty Seconds #040 – Video
  • SQL SERVER – 2008 – Función TRIM() mejorada – Eliminar espacios finales, espacios iniciales, espacios en blanco, tabulaciones, Retornos de carro, saltos de línea
  • SQL SERVER – 2008 – Función TRIM() – Función definida por el usuario
  • SQL SERVER – Función TRIM() – UDF TRIM()
  • SQL SERVER – 2017 – ¿Cómo eliminar espacios iniciales y finales con la función TRIM?
  • SQL SERVER – Observación del rendimiento de la función TRIM

Noe vamos a empezar con un ejemplo sencillo en el que vamos a comparar el rendimiento de LTRIM/RTRIM con la función TRIM que se ha introducido recientemente en 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

Ahora, durante la prueba, tenemos tres sentencias select en las que los dos casos estamos utilizando LTRIM/RTRIM, así como la función TRIM. Comparemos el rendimiento de la misma con la sentencia select donde no hemos utilizado ninguna función en la cláusula WHERE.

SQL Server - Comparación del rendimiento de la función Trim y LTRIM(RTRIM) trimperf

SQL Server - Comparación del rendimiento de la función Trim y LTRIM(RTRIM) trimperf

Está muy claro que si utilizamos cualquier función en la columna utilizada en la cláusula WHERE vamos a obtener un bajo rendimiento.