2010-04-22 2 views
7

Estas dos declaraciones son lógicamente equivalentes:ENTRE operador vs.> = AND <=: ¿Hay una diferencia de rendimiento?

SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100 

SELECT * FROM table WHERE someColumn >= 1 AND someColumn <= 100 

¿Hay un potencial de mejora en el rendimiento de uno contra el otro?

+1

Ni siquiera era consciente de que había un operador intermedio. Al mirarlo por primera vez, no estaba 100% claro si sería inclusivo o exclusivo. Adiviné correctamente, pero dado que las respuestas dicen que no hay diferencia de rendimiento, me quedaría con la segunda versión para que quede más clara. Sin embargo, soy el tipo de persona que agregará paréntesis donde no son necesarios solo para asegurarse de que no haya ningún malentendido cuando otra persona lea mi código. – drs9222

Respuesta

4

Sin beneficio, solo una sintaxis de azúcar.

Al utilizar la versión BETWEEN, puede evitar la reevaluación de la función en algunos casos.

1

No, no hay rendimiento benifit. Es solo un pequeño caramelo.

Si se va a comprobar una comparación consulta, algo así como

DECLARE @Table TABLE(
     ID INT 
) 

SELECT * 
FROM @Table 
WHERE ID >= 1 AND ID <= 100 

SELECT * 
FROM @Table 
WHERE ID BETWEEN 1 AND 100 

y comprobar el plan de ejecución, usted debe notar que es exactamente el mismo.

1

No hay beneficio en el rendimiento, es más fácil leer/escribir el primero.

1

Hmm, aquí fue un resultado sorprendente. No tengo SQL Server aquí, así que probé esto en Postgres. Obviamente se aplican exenciones de responsabilidad: esto no necesariamente dará los mismos resultados, su millaje puede variar, consulte a un médico antes de usar. Pero aún así ...

que acabo de escribir una consulta sencilla de dos maneras diferentes:

select * 
from foo 
where (select code from bar where bar.barid=foo.barid) between 'A' and 'B' 

y

select * 
from foo 
where (select code from bar where bar.barid=foo.barid)>='A' 
and (select code from bar where bar.barid=foo.barid)<='B' 

Sorprendentemente para mí, ambos tenían tiempos de ejecución casi idénticos. Cuando hice un PLAN DE EXPLICACIÓN, dieron resultados idénticos. Específicamente, la primera consulta hizo la búsqueda contra la barra dos veces, una para la prueba> = y otra para la prueba < =, al igual que la segunda consulta.

Conclusión: En Postgres, al menos, BETWEEN es simplemente azúcar sintáctico.

Personalmente, lo uso regularmente porque es más claro para el lector, especialmente si el valor que se prueba es una expresión. Entender que dos expresiones complejas son idénticas puede ser un ejercicio no trivial. Entender que dos expresiones complejas DEBEN SER idénticas aunque no lo sean es aún más difícil.

Cuestiones relacionadas