Para resolver este problema, no puedes hacer un SELECT *, ya que debes controlar los campos reales que van aa aparecer.
Si lo que necesitas es un detalle de sólo el primero, hay que hilar fino los campos:
Código:
SELECT
titulo_hilo AS 'TEMA',
date_hilo AS CREADO,
titulo_post AS 'RESPUESTA',
MAX(date_post) as 'ULTIMO POST'
FROM posts INNER JOIN hilos
ON id_hilo = id_hilo_post
GROUP BY id_hilo
ORDER BY date_post DESC
El INNER JOIN es para que los optimizadores de los índices funcionen correctamente. Es el modo de hacer esa relación entre campos y pertenece al estandar de SQLdesde hace años. Poner esa selección el el WHERE no le permite a MySQL hacer una buena optimización.
Lo vas a percibir ante el crecimiento de las tablas.