Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/02/2009, 05:36
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: Eficiencia en consulta!

Lo que estás tratando de ubicar es la cantidad de ocurrencias de cada estado, y como el campo es siempre el mismo, creas una subconsulta por cada uno.
La idea esta cerca, pero no es eficiente. Cada una de esas consultas barre toda la tabla; po reso es lenta: Al haber cinco estados hay cinco barridos de tabla. Y como no hay índices en ese campo la cosa se toma todo el tiempo posible...
Existen dos formas simples de encarar el asunto:
1. La que te está proponiendo jurena, con el INNER JOIN.
2. Sumar las ocurrencias en una sola barrida.
Esta segunda sería:
Código sql:
Ver original
  1. SELECT
  2.     IDTipo,
  3.     NombreTipo,
  4.     SUM(IF(STATUS = 'Status1',1,0)) Status01,
  5.     SUM(IF(STATUS = 'Status2',1,0)) Status02,
  6.     SUM(IF(STATUS = 'Status3',1,0)) Status03,
  7.     SUM(IF(STATUS = 'Status4',1,0)) Status04,
  8.     SUM(IF(STATUS = 'Status5',1,0)) Status05
  9. FROM tblTipoDato
  10. WHERE
  11.     TipoDato=IDTipoDato;
En definitiva, lo que hará por cada registro es sumar 1 ó 0 según sea el valor del campo, en cada caso.
Pruébalo y nos cuentas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)