Cita: Como ven es un simple select con un like que tiene comodines ( % ), en el primer caso lo hace enseguida porque pido todo los campos y sin orden. Pero cuando lo quiero ordenado demora mucho.
La tabla tiene 160.000 registros cosa que no considero demasiado
Una consulta con LIKE, lamentablemente, no es una consulta "simple". Es el tipo de consultas de baja eficiencia porque lo que busca es similitudes, y las similitudes requieren e principio un escaneo de toda la tabla. Siempre.
En ese sentido es más eficiente, si vas a usar LIKE, usarlo con campos con índices y definir que lo usará (FORCE INDEX ....) al leer la tabla, antes que usar un LIKE pelado.
Además de eso, estás invocando un ORDER BY, que junto con GROUP BY son las clausulas que más consumen tiempo y recursos, por lo que si la consulta se tarda demasiado, bueno, no tiene mucha más solución que modificar la configuración del servidor (
sort_buffer, log_slow_queries)l o bien el hardware, para optimizarlo.
Ten en cuenta también, que todo ordenamiento por campo no clave o no perteneciente a un INDEX, insumirá siempre más tiempo, porque debe ordenar por comparación de valores... y a más valores, más tiempo.