2010-11-10 11 views
7

Solo estoy obligado a hacer RTRIM() en alguna parte de la consulta, pero si lo hago TRIM() afectará el rendimiento.TRIM RTRIM LTRIM Rendimiento

Es Trim() Más lento/rápido/Exactamente igual (ni siquiera ha diferencia insignificante) comparación con RTRIM() Y LTRIM()?

Esto es con respecto a Oracle 10g SOLAMENTE.

Pero en el caso de SQL Server 2005, ¿Tenemos la función/método 'x()' tal que puede reemplazar RTRIM(LTRIM(' blah.. blah.. ')) en una sola función?

Simplemente me refiero a tener la función "única" para hacer la misma funcionalidad que RTRIM() Y LTRIM().

Respuesta

6

Sobre la base de esta prueba áspera hay una pequeña diferencia:

DECLARE 
n PLS_INTEGER := DBMS_UTILITY.get_time; 
s1 VARCHAR2(32767); 
s2 VARCHAR2(32767); 
BEGIN 
s1 := LPAD('X',15000,' ') || RPAD('X',15000,' '); 
FOR i IN 1..1000000 LOOP 
    NULL; 
END LOOP; 
DBMS_OUTPUT.put_line('Baseline: ' || (DBMS_UTILITY.get_time - n)); 
n := DBMS_UTILITY.get_time; 
FOR i IN 1..1000000 LOOP 
    s2 := LTRIM(s1); 
END LOOP; 
DBMS_OUTPUT.put_line('LTRIM: ' || (DBMS_UTILITY.get_time - n)); 
n := DBMS_UTILITY.get_time; 
FOR i IN 1..1000000 LOOP 
    s2 := RTRIM(s1); 
END LOOP; 
DBMS_OUTPUT.put_line('RTRIM: ' || (DBMS_UTILITY.get_time - n)); 
n := DBMS_UTILITY.get_time; 
FOR i IN 1..1000000 LOOP 
    s2 := TRIM(s1); 
END LOOP; 
DBMS_OUTPUT.put_line('TRIM: ' || (DBMS_UTILITY.get_time - n)); 
END; 

La diferencia asciende a un máximo de 0,000128 centésima de de un segundo en el peor de los casos:

Baseline: 0 
LTRIM: 113 
RTRIM: 103 
TRIM: 8 
Baseline: 0 
LTRIM: 136 
RTRIM: 133 
TRIM: 8 
+0

La diferencia puede explicarse por el hecho de que LTRIM y RTRIM pueden recortar un * conjunto * de caracteres, mientras que TRIM solo tiene que buscar un solo carácter. –

+0

Gracias por el análisis y la explicación. Pero lo que en el caso de TRIM ("secuencia-de-caracteres específicos-en lugar de-espacios-solamente"). – Pratik

+0

Ok, cambió 's1: = LPAD ('X', 32000, 'X');' y la diferencia de rendimiento se reduce - menos de 0.000091 centésimas de segundo. –

3

La diferencia en el rendimiento generalmente será indetectable, especialmente si se trata de una consulta que obtiene sus datos de una tabla. Elija lo que se ajuste a sus necesidades.

+2

Independientemente de las diferencias menores o indetectables en TRIM() y LTRIM()/RTRIM(), ¿cómo afecta el rendimiento, incluso si es de magnitud mínima/irreconocible? – Pratik

+1

Si la diferencia es indetectable, eso significa que no podemos decir con certeza si un método es más rápido que el otro. Eso es lo que significa "indetectable". –

+0

Gracias por un buen ejemplo.Sin embargo, TRIM() sería más lento que RTRIM() o LTRIM() pero como no sé el algoritmo utilizado detrás de ellos o el código dentro de él, estaba tratando de encontrar una explicación o una contradicción para mi creencia. – Pratik

0

Nunca he visto nada como un punto de referencia en los Trims en SQL Server. Lo he usado mucho y encuentro un rendimiento menor cuando trato con muchos datos ... rendimiento menor.

+0

Independientemente de las diferencias menores o indetectables en TRIM() y LTRIM()/RTRIM() ¿cómo afecta el rendimiento, incluso si es de magnitud mínima/irreconocible? – Pratik

2

La pregunta es irrelevante para la SQL Server, ya que implementa LTRIM y RTRIM pero no TRIM.

Ver la lista de SQL 2005 string functions.

Cuestiones relacionadas