Ver Mensaje Individual
  #6 (permalink)  
Antiguo 21/06/2011, 16:34
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: duda con where e inner join.

No. Tablas temporales son cierto tipo de tablas como las TEMPORARY e incluso las MEMORY. Trabajan sobre otros motores de tablas.
Las tablas generadas por una subconsulta se denominan tablas derivadas y existen en todos los DBMS.
En cuanto a lo de que no sea una buena práctica, es como todo: Dependen del caso.
Tengo procedimientos almacenados que crean y destruyen más de diez tablas temporales en consultas extremadamente complejas, y no son ineficientes. Las pruebas realizadas con el mismo objetivo y con tablas fijas insumieron más tiempo de procesos, y fueron más lentas.
Por otro lado, en esos caso convinieron las temporales porque como existen en una conexión y son invisibles en las demás, no necesito definir nombres personalizados para crearlas. Uso los mismos y jamás hay conflictos.
Al respecto de las subconsultas en tablas derivadas, si tienes un caso con 15000 registros (por exagerar un poco), en una tabla relacionada con otra de 1000000, el INNER JOIN generará un conjunto de datos de al menos 1000000 de registros. Pero ¿qué pasa si de esos 15000 necesitas sólo 100? ¿Para qué generar una tabla esultado de 1.000.000 de registros para luego obtener sólo 100 ó 1000 de resultado final?
Además, como ter dije, esas cosas están muy afectadas por los índices. Tengo el caso de un procesamiento de alrededor de 647000 registros que tardaba con INNER JOIN sólo, más de 20 minutos en devolverme los resultados. Luego lo probé con una tabla derivada en los campos críticos y bajó a 17 minutos (es un caso de cantidades masivas de datos y campos espaciales).
Entonces probé ponerle un índice y dejar la subconsulta... Obtuve el mismo resultado en 18.6 segundos...

¿Entiendes la idea? No tomes las cosas al pie de la letra. Lo que resulta bueno para un caso es malo para otro y viceversa.

Cada caso puede requerir una solución diferenciada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)