[eside-ghost] usar and o between en una consulta en mysql

JammyZ jammyz en gmail.com
Sab Abr 8 13:44:11 CEST 2006


Aupa,
        lo primero saludar que me he vuelto a apuntar a la lista
despues de mucho tiempo, aunque nunca fui mucho mas que un lurker.
       En fin, respecto al between en mysql, he estado mirando un poco
en la web de mysql y en la documentacion[1] ponen lo siguiente:

expr BETWEEN min AND max
This is equivalent to the expression (min <= expr AND expr <= max) if
all the arguments are of the same type. Otherwise type conversion
takes place

expr NOT BETWEEN min AND max
This is the same as NOT (expr BETWEEN min AND max).

Creo que internamente funcionan igual y que no hay ninguna diferencia,
de hecho he probado a hacer un explain de un consulta sobre un campo
de una tabla que es indice primario y el resultado es el mismo para
ambas opciones.

Me parece que por legibilidad es mejor usar un between, pero en
terminos de rendimiento es igual.

[1] http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html

On 4/7/06, Jorge García (aka Bardok) <bardok en telefonica.net> wrote:
> Buenas,
>
> > diferencia en rendimiento entre hacer   select * from tabla where fecha
> > between 2001 and 2005; y   select * from tabla where ((fecha>=2001) and
> > (fecha<=2005))
>
> te hablo sin saber, pero por lógica, yo supongo que el between, por una razón
> muy sencilla:
>
> Si el campo por el que estás preguntando es un índice, y éste está guardado,
> por ejemplo, en una estructura en forma de árbol, el between necesitaría tan
> sólo "podar" todas las ramas de fuera del intervalo (es decir, buscar los dos
> extremos, y quedarse con todo lo de dentro).
>
> La segunda, en cambio, tendría que hacer más operaciones: un recorrido para la
> primera condición, otro para la segunda, y después "fusionar" los resultados.
> Evidentemente, esta operación podrá estar optimizada, por ejemplo, para que
> la segunda condición sólo se aplique sobre aquel conjunto de datos que ha
> cumplido la primera condición.
>
> En el mejor de los casos (si está optimizada), la segunda será igual que la
> primera en cuanto a número de accesos al índice, pero por si no existe esa
> optimización, yo utilizaría siempre la primera opción.
>
> Además, quieras que no, la segunda implica evaluar dos condiciones, mientras
> que la primera sólo una, y eso será algo menos de tiempo de proceso que
> requiera el motor de base de datos.
>
> Ya digo que hablo sólo aplicando la lógica, de cómo lo implementaría yo, pero
> mi interpretación y la realidad no tienen por qué tener ningún parecido :-)
>
> Un abrazo:
>
>         Bdk
>
> --
> ---------------------------------------------------------
>  Jorge García (aka Bardok)
>  URL: http://www.bardok.net
>  email: bardok AT telefonica DOT net
>         shadow AT bardok DOT net
> ---------------------------------------------------------
>  "I do not feel obliged to believe
>  that the same God who has endowed us
>  with sadness, reason and intellect
>  has intended us to forgo their use"
>  - Galileo Galilei -
>         Haggard - The Observer
> ---------------------------------------------------------
>
>
> _______________________________________________
> eside-ghost mailing list
> eside-ghost en deusto.es
> https://listas.deusto.es/mailman/listinfo/eside-ghost
>
>


Más información sobre la lista de distribución eside-ghost