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.
Está muy claro que si utilizamos cualquier función en la columna utilizada en la cláusula WHERE vamos a obtener un bajo rendimiento.