Ver Mensaje Individual
  #13 (permalink)  
Antiguo 12/03/2012, 08:43
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

No necesariamente. InnoDB hace un poco más lentos los INSERT, UPDATE y DELETE, pero los SELECT no varían demasiado entre MyISAM e InnoDB, al menos para tu caso.
Lo grave es que tengas duplicaciones de una ID (¿puedes explicarme cómo es que se puede duplicar? ¿Cuál es la PK de esa tabla?), y que debas recurrir a GROUP BY para eliminarlas.
Bueno, uno de los problemas es que en esa consuta invocas a las dos cláusulas menos performánticas que existen: ORDER BY y GROUP BY. Si quieres tener problemas con la velocidad, es el mejor modo.
Pero algo de eso ya te lo habían dicho.
Otro de los defectos es que ciertas validaciones las estás haciendo muy grandes innecesariamente.
Esto es poco eficiente:
Código MySQL:
Ver original
  1. (fecha_on>='2012-03-09 00:00:00' AND fecha_off<='2012-03-09 23:59:59')
Esto es más siple, porque requiere casi la mitad de memoria:
Código MySQL:
Ver original
  1. DATE(fecha_on)>='2012-03-09' AND DATE(fecha_off) <='2012-03-09'
También debe considerarse que si bien puedes hacer indices de tipo INDEX sobre el "ID", sería mejor crear un índice entre el "campo1" y la fecha_on, por ejemplo. Eso podría mejorar la cosa teniendo e cuenta que cuando un índice usado contiene los datos que se mostrarán, normalmente MySQL no lee la tabla de datos, sino que saca todo del índice.
Una posibilidad a probar sería, por ejemplo, crear una tabla TEMPORARY con un índice UNIQUE definido sobre los cuatro campos en cuestión y lueg consultarla... Podría andar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)