[pyar] OT: Comparación de queries

Pablo Lerner lernerpablo en gmail.com
Lun Jun 21 14:33:33 ART 2010


>
> Hice la misma query de 2 maneras:
>
> SELECT q_name FROM miranda WHERE parID in (SELECT parID FROM parid_bin
> WHERE bin = '10B');
> Contra:
> SELECT q_name FROM miranda,parid_bin WHERE
> miranda.parID=parid_bin.parID AND parid_bin.bin = '10B';
>
> Con mi dataset ambas tardan lo mismo:
> CPU Time: user 0.004000 sys 0.000000
>
> Pero queria saber si en sus experiencias o en base a la teoria hay
> alguna diferencia o una forma preferible entre las 2.
> Encontré en StackOverflow esto:
>
> http://stackoverflow.com/questions/2649637/difference-between-where-and-nested-queries
> Donde dice que las queries no son equivalentes porque si hay ids
> repetidos, tendras resultados repetidos. Pero no es mi caso porque mis
> ids son únicos.
> Tambien dice que la equijoin puede ser mas rápida porque la DB hace
> una optimización, pero queria igual ver sus opiniones.
>



En principio la segunda sería, me parece, siempre más rápida. En la primera
le estás diciendo al motor de BD que ejecute el subquery por cada registro
de la tabla miranda. El motor tendrá la inteligencia de no repetir este
query por todos los registros, sino de hacerlo una sola vez, pero eso
dependrá de la inteligencia del mismo, y de un montón de cuestiones internas
del mismo que uno, como usuario, en general no entiende. Me parece mejor
hacerse la costumbre de decirle de una, que haga las cosas de la forma más
ópima posible, ya que muchas otras veces, con otros querys más complejos, no
tendrá la inteligencia de optimizar por sí sólo. Este caso perticular es
realmente sencillo, supongo que el motor sabrá optimizarlo sin problemas.

Por otro lado, también me parece mejor usar la sintaxis del JOIN explícito,
como ya te dijeron, y también para hacerse la costumbre. Esto lo vas a
entender mejor viendo los outer joins, que es complicado implementarlo sin
ser explícito (ni siquiera puedo recordar ahora cómo se hace). Además que el
motor, dentro de su inteligencia, cuando le dicen la palabra JOIN ya
entiende lo que se quiere hacer y puede pensar mejor cómo resolverlo.

Todo esto es en general, sin pensar en un motor particular. Espero ayude...

Pablo
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20100621/97cf2393/attachment.html>


More information about the pyar mailing list