[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