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(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:
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.