• Lunes 18 de Noviembre de 2024, 03:40

Autor Tema:  Prepared Statements anidados [PHP + MySQL]  (Leído 3752 veces)

Zirrosis

  • Miembro activo
  • **
  • Mensajes: 97
    • Ver Perfil
Prepared Statements anidados [PHP + MySQL]
« en: Miércoles 14 de Diciembre de 2011, 18:08 »
0
Buenas a todos!

Miren, quería preguntarles algo que me esta pasando con mi proyecto. Para que tengan una idea de lo que quiero hacer, imaginen el muro de facebook o tuenti, con sus publicaciones y sus comentarios en cada publicación. Lo que estoy haciendo es lees la parte de publicaciones y en la parte de fetch, tengo una función que me busca los comentarios de dicha publicación. Algo así:

Código: PHP
  1. while($stmnt->fetch())
  2. {
  3.       echo busca_comentarios($id);
  4. }

donde la función busca_comentarios vuelve a abrir una conexión a la bd con un prepared statement, hace el select en la tabla adecuada, cierra la conexión y devuelve resultados.

Lo que me está pasando es que para leer unas pocas publicaciones (menos de 20) con sus comentarios, me tarda poco más de 1 segundo, tiempo que creo que es extremadamente alto, dado que de momento hay poco texto en la BD. Alguien tiene alguna solución de como agilizar esto??

PD: En cada subfunción abro una conexión nueva, hago lo que tenga que hacer y luego la cierro. Al hacerlo con un único usuarios está claro que no voy a saturar el servidor MySQL, pero creo que con unos cuantos usuarios (¿mil?) se podría llegar a saturar, no?? Y no es plan de configurar MySQL para que acepte tropecientas conexiones (de echo, por defecto acepta 151 con un máximo de 10000).

Un saludo y muchas gracias  :smartass:

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re:Prepared Statements anidados [PHP + MySQL]
« Respuesta #1 en: Jueves 15 de Diciembre de 2011, 05:26 »
0
Quizas tengas que optimizar tu consulta utilizando indices y relaciones apropiadas.

con la instruccion Explain puedes darte una idea de como optimizar:

Buscala y veras

http://www.google.com.mx/#sclient=psy-ab&hl=es-419&source=hp&q=explain+sql&pbx=1&oq=explain+sql&aq=f&aqi=g2&aql=&gs_sm=e&gs_upl=2785l5239l0l5970l11l10l0l1l1l0l227l1884l0.6.4l11l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=6b68c01e8b94ce05&biw=1366&bih=572


Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

Zirrosis

  • Miembro activo
  • **
  • Mensajes: 97
    • Ver Perfil
Re:Prepared Statements anidados [PHP + MySQL]
« Respuesta #2 en: Jueves 15 de Diciembre de 2011, 22:11 »
0
Muchas gracias por tu respuesta, lo revisé y si me faltaban unos cuantos índices. Pero es problema persiste, es algo raro, ya que en las tablas que busco no tengo más de 50 filas (en la que más, en las otras unas 13, 20 y 5). Todos estos accesos se producen al leer la primera tabla.

Para ahorrar conexiones, lo que hace es en una consulta devolver los resultados "ya resueltos", es decir, en una tabla tengo el idUsuario y en la de usuarios, el idUsuario, nombreUsuario, etc. Al consultar la primera tabla ya resuelvo en nombre de usuario, me ahorro una consulta... de todos modos, no creo que sea culpa de esto que se sobrecargue. Es que si con 50 filas me tarda esto, no quiero ni pensar que hará con 160.000, por ejemplo  :think:

Muchas gracias  :smartass: