Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/09/2009, 09:16
luciano_che
 
Fecha de Ingreso: diciembre-2007
Ubicación: Rosario
Mensajes: 65
Antigüedad: 16 años, 4 meses
Puntos: 2
Cuál consulta es más eficiente?

Hola, hace un tiempo estoy metido en un lío con una web que estoy desarrollando, en la cual voy a implementar un sistema de categorías en la cual puedo asignar varios objetos a una categoría y varias categorías a un mismo objeto, esta es la parte complicada (para mi por lo menos), por eso tuve que utilizar 3 tablas.

Una tabla para las categorias, otra para los objetos y otra que contenga las correspondientes relaciones.

El problema me surge cuando quiero ver los objetos de una determinada categoria, tengo hechas dos consultas distintas que, aparentemente, devuelven lo mismo, pero son muy distintas, supongo que una es mas eficiente que la otra, quisiera saber si me pueden decir cuál es.

Los objetos que mencioné son programas.

Código:
"select pro.titulo as nombre, relacion.catTitulo as catTitulo, relacion.catNicename as catNicename, pro.nicename as nicename, pro.descrCorta as descrCorta, pro.licencia as licencia from
   (select cat.titulo as catTitulo, cat.nicename as catNicename, rel.idPrograma as proId from
      (select idPrograma, idCategoria from $tablaRelacion where idCategoria = [id de la categoria]) as rel
   join
   $tablaCategorias as cat
   where rel.idCategoria = cat.idCat) as relacion
join
$tablaProgramas as pro
where relacion.proId = pro.idPrograma;"
Código:
"SELECT pro.titulo as nombre, cat.titulo as catTitulo, cat.nicename as catNicename, pro.nicename as nicename, pro.descrCorta as descrCorta, pro.licencia as licencia FROM $tablaRelacion as rel, $tablaProgramas as pro, $tablaCategorias as cat
WHERE rel.idCategoria = cat.idCat
AND cat.idCat = [id de la categoria]
AND pro.idPrograma = rel.idPrograma
GROUP BY pro.idPrograma;"
Creo que no hace falta que les explique las diferencias, en el 1er caso fui creando tablas "auxiliares" y las fui uniendo; en la segunda (la cual la encontre en internet), aparentemente lo que hace es un join entre 3 tablas (si no me equivoco) y luego pone las condiciones. La 2da opción parece más elegante, pero imagino que carga bastante al servidor, qué les parece?

Conocen alguna forma más eficiente de hacer esto?

Muchas gracias

Última edición por luciano_che; 13/09/2009 a las 09:34