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

Jorge García (aka Bardok) bardok en telefonica.net
Sab Abr 8 00:01:07 CEST 2006


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
---------------------------------------------------------


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