Ver Mensaje Individual
  #15 (permalink)  
Antiguo 12/03/2012, 11:25
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: Problemas de ejecución con un SELECT

Cita:
Uso GROUP BY porque el aplicativo que hace INSERTS en esa tabla repite registros con lo cual tengo algunos registros con fecha_hora iguales.

Uso el ORDER BY para que apareza del primer registro del día al último registro del día.
Eso ya te lo había entendido. Mi intención es que comprendas que uno de tus problemas es que estés necesitando usar esas cláusulas, porque son esas cláusulas las que ayudan a que sea lento.
Lo mejor sería no tener que usarlas, y para ello hay algunas alternativas, como la que te menciono al final de mi post.
Cita:
Uso el WHERE con la fecha y hora ya que el usuario tiene un formulario como el siguiente:

FECHA ON: 01/01/2012 00:00:00
FECHA OFF: 12/03/2012 13:00:00
Lo que el usuario vea en su formulario en este caso es irrelevante. Lo que importa es el rango de datos que estás buscando en la consulta:
Código MySQL:
Ver original
  1. SELECT campo1
  2. FROM informes_tabla
  3. WHERE (fecha_on>='2012-03-09 00:00:00' AND fecha_off<='2012-03-09 23:59:59') AND id='1'
  4. GROUP BY fecha_1
  5. ORDER BY fecha_1 ASC;
Lo que traducido a una frase sería: "Todo lo igual o posterior al primer segundo del 09/02/2012, y anterior o igual al último segundo del día 09/02/2012".
Y eso es lo mismo que poner:
Código MySQL:
Ver original
  1. SELECT campo1
  2. FROM informes_tabla
  3.     DATE(fecha_on)>='2012-03-09' AND DATE(fecha_off)<='2012-03-09')
  4.      AND id=1
  5. GROUP BY fecha_1
  6. ORDER BY fecha_1 ASC;
Con la diferencia que la primera necesita 8 Bytes por dato y la otra 3. Lo que a nivel de procesamiento hace una buena diferencia.

Por otro lado, respecto a que dos ejecuciones tarden diferente, aún con los mismos datos, no es extraño, porque la resolución de los planes de consulta por el parser puede variar de acuerdo a los rsultados de las consultas anteriores. No te olvides que el parser trabaja estadísticamente.
Y precisamente por ese nivel de análisis que hace, el hecho de que haya una cardianlidad elevada entre diferentes valores, impacta en el mayor o menor tiempo en que una consulta se ejecuta.
Yo te sugeriría que antes de seguir adelante, primero debes depurar las tablas para suprimir los duplicados, porque eso puede estar causando enorme redundancia, que se refleja en una mala performance de la consulta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 12/03/2012 a las 11:33