Pues lamento decir que de PHP y de MySQL no sé nada de nada... lo único que he hecho en temas web ha sido con ASP y siempre contra Oracle y SQL Server.
No obstante tengo entendido que MySQL adolece de muchas carencias y de que su éxito es debido a que se trata de una base de datos libre, pero cuando hay DATOS, la cosa se complica.
Por ejemplo, imagino que el hecho de que un usuario cargue esta página, implicará que el servidor haga tantas lecturas a la base de datos, como posts hay en la página. Con Oracle esto se puede hacer devolviendo un único recordset utilizando para ello ya funciones definidas por el usuario que devuelvan un array con todo lo que se ha de ver. Es decir, que el servidor sólo envía una única petición a la BBDD y ésta retorna una única respuesta, no hay necesidad de hacer un bucle en PHP, es ya el servidor de la base de datos el que ya lo hace.
Independientemente de esto, hace tiempo hice algunas pruebas de rendimiento con MySQL, y si se comparaba con las otras dos BBDD que mencioné antes... era la noche y el día.
Sé que ambas son de pago y fuera del mundo de las empresas, los foros han de "conformarse" con todo lo que existe a su alcance con el mejor ratio de rendimiento/coste.
Estoy interesado no obstante en todo este tema de conseguir mayor velocidad a un coste lo más pequeño posible, pues se me ha pasado por la cabeza alguna vez el montar algo así, pero ya digo que ni idea de todo esto... en el trabajo no tengo que preocuparme por costes y son los clientes los que tienen licencias de bases de datos y sólamente han de preocuparse por el hosting en el caso de que no tengan un servidor propio.
La idea de separar el servidor del foro del de base de datos creo que es interesante. Un motor de base de datos siempre utiliza mucha RAM, y cuanta más se tenga dedicada a ello, mejor que mejor. Una opción adicional y quizás menos costosa, es la de tener un servidor de base de datos compartido con otras webs, por ejemplo con forodvd, donde se tenga un SQL Server con dos bases de datos... todo esto, pensando en voz alta.
Quizás se trata de hacer alguna prueba utilizando lo que ya hay ahora montado. Como barbaridad se me ocurre el lanzar dos consultas a la base de datos cuando un usuario carga un post. Una consulta sería un "select count" para ver cuandos registros hay, y la siguiente sería realizar una única consulta en la que se devuelvan todos esos registros, habiendo creado una sentencia en tiempo de ejecución de la siguiente forma (supongamos que son dos campos por registro de un post, que ya sé que son más):
Código:
Select
A.campo1 as C1, A.campo2 as D1, B.campo1 as C2, B.campo2 as D2,
C.campo1 as C3, C.campo2 as D3, D.campo7 as C4, D.campo8 as D4
from
TablaPosts A, TablaPosts B, TablaPosts C, TablaPosts D
where
A.idpost=<post> and
A.idlinea=1 and
B.idpost=<post> and
B.idlinea=2 and
C.idpost=<post> and
C.idlinea=3 and
D.idpost=<post> and
D.idlinea=4
A lo mejor es una burrada lo que digo, personalmente no lo he probado, pero a lo mejor es más rápido que hacer el bucle que vaya a leer al servidor, aunque éste ya tenga los datos buscados, quizás se gana un tiempo que sirve de algo y se nota.